最も単純なRSSリーダー

前文



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からのメッセージを送信することもできます。



All Articles