前文
RSSを追跡するには、いわゆるアグリゲータープログラムを使用すると便利です。 Google Readerなどのオンラインアグリゲーターも現在人気を集めています。 ただし、特定のテープを1日または数日間追跡する必要があり、一時的なリンクでアグリゲーターを詰まらせる必要がない場合など、その機能が冗長である場合があります。 そのため、このようなツールが必要でした。
このツールは、次のタスクを解決することになっています。
-アップデートについて通知する
-リンクをすばやくたどる機能
-データ、セッションなどを保存しない
結果は次のとおりです。
そして、どのように-以下をお読みください。
コンソール
最初に見つけたのはrsstailでした。
rsstailは、フィードの更新をリアルタイムで監視できるコンソールプログラムです。 このプログラムはその機能を100%実行しますが、判明したように、コンソールに切り替えて最新の録画の目を通して見るのは不便です。
グラフィカルアプリケーション
これに続いて、最も単純なグラフィックリーダーを見つけるために、反対側からアプローチする試みが行われました。
これらの検索の結果、最も単純なリーダーのほとんどでさえ完全なアグリゲーターであり、その機能は単一のフィードの追跡などの単純なタスクには冗長すぎることが示されました。
グラフィックスとコンソールの組み合わせ
いくつかのグラフィック通知モジュール(トレイ)をrsstailにねじ込みましょう。
試した:
-通知送信(マウスイベントが処理されないため、適切ではありません)
-gtrayicon(トリガーとして機能します:オン/オフ、および開始後にツールチップメッセージを変更することは不可能です)
-zenity(--notificationキーを使用しようとしましたが、このモードはまだ完全には実装されていません)
これで検索が終了し、単純なフィードリーダーを取得するタスクはそれほど単純ではありませんでした。
スクリプトをしましょう!
さて、ここには境界線がほとんどありません!
コード全体をコメントアウトしようとしたので、自分で整理して作り直すのは難しくありません。
メッセージアイコンをトレイに入れる
#!/usr/bin/env ruby #scriptname: libs/rsstray.rb require 'gtk2' browser = 'libs/browser.sh' # signal is using for pushing commands to the main thread signal = Queue.new # Create tray icon si = Gtk::StatusIcon.new # Choose icon image si.icon_name = 'application-rss+xml' # Hide tray icon si.visible = false # Bind action mouse button si.signal_connect('activate') { signal.push('open') } # Bind menu mouse button si.signal_connect('popup-menu') { if signal.num_waiting != 0 then signal.push('') end } # Main thread that reads data from pipe Thread.start do # Get line line by line from pipe while line = STDIN.gets # A record isn't ready yet ready=0 # Parse line case line when /^Title: (.*)$/ then title = $1 when /^Link: (.*)$/ then link = $1 when /^Pub.date: (.*)$/ then pubdate = $1; ready=1 end # Read next line if record ins't ready if not (ready == 1) then next end # Send url to STDOUT puts link # Check if all properties are exist if defined? title and defined? link and defined? pubdate message = title + "\n\n" + link + "\n\n" + pubdate else message = "Something wrong has happened..." end # Set tooltip message for tray icon si.set_tooltip(message) # Make tray icon visible si.set_visible(true) # Wait for signal and open browser if signal is 'open' # and go futher if signal isn't 'open' while signal.pop == 'open' pid = fork { exec(browser, link ) } Process.detach(pid) end # Hide tray icon si.set_visible(false) end # Exit if EOF Gtk.main_quit end # Start main GTK loop Gtk.main
「トレイ」スクリプトの入力にデータを送信します
#!/bin/bash #scriptname: rssreader.sh # Go to script directory cd $(dirname $0) || exit 1 # Check arguments [ -z "$1" ] && { echo "usage: $0 http://address_of_rss_feed [number_of_initially_show_items]"; exit 0; } [ -z "$2" ] && num=1 || num=$2 # Lunch rsstail and tray icon rsstail -zpl -n $num -u "$1" | libs/rsstray.rb
トレイスクリプトからのイベントでブラウザを起動します
#!/bin/bash #scriptname: libs/browser.sh firefox "$1" 2> /dev/null & disown
使い方
打ち上げ
rssreader.sh http://habrahabr.ru/rss 5
ここで、 habrahabr.ru / rssはフィードのアドレス、5は起動直後にリーダーに送られる最近のエントリの数です。 数値が指定されていない場合、デフォルトは1です。
システムトレイ
-アイコンに移動-現在のレコードに関する簡単な情報がツールチップウィンドウに表示されます
-ボタン「アクション」(通常は左)-ブラウザで現在のエントリを開きます
-「コンテキストメニュー」ボタン(通常は右)-次のエントリに移動
-エントリがなくなると、新しいエントリが表示されるまでアイコンが消えます。
いくつかのコメント
-Ubuntu 10.10 + ruby 1.8.7で検証されたスクリプト
-スクリプトを正しく機能させるには、ruby、libgtk2-ruby、rsstailをインストールする必要があります
-rsstailはデフォルトで15分ごとに更新をチェックします
-ルビー1.8のfork + detachの適切な実装を見つけることができなかった(追加のライブラリをインストールせずに)ので、ダーティトリックを使用し、「bash」と「&disown」を使用してブラウザープロセスをリーダーから切り離さなければなりませんでした。
ruby 1.9では、これを行う必要はありませんが、まだ主流ではありません。
あとがき
単純なRSSリーダーのスクリプトは、何らかの理由でメインリーダーにフィードを追加したくないユーザーだけでなく、テストサイトでRSSリーダーをテストするWeb開発者や、スクリプトエンジンの機能のデモンストレーションにも役立ちます。 反対側でプレイして、RSSではなく、たとえば、nagtailを使用してNagiosからのメッセージを送信することもできます。