>> 古い記事: Yapra: クラスベースのプラグインの書き方とファイル配置、パスの通し方
<< 新しい記事: Yapra: hAtomまたはユーザ定義XPathを使ってウェブページをフィードに変換するプラグイン

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Yapra: フィードの要約を表示するプラグイン

「何かのプラグインでフィードを生成する → 結果を見る → パラメータなど修正」 という手順のうち、結果を確認する部分がめんどくさかったので作ってみました。

設定ファイルをいじってフィードを生成する場合だけでなく、 フィードを加工するプラグインを作る場合にも便利。


# test.yaml
- module: RSS::load
  config:
    url: http://feeds.fc2.com/fc2/xml?host=haraita9283.blog98

- module: Feed::PrintSummary
  config: 
    size: 3

このように設定ファイルを書いて端末から実行すると、標準出力に次のように出力されます。

$ yapra -c test.yaml
(略)
title: [Yapra: クラスベースのプラグインの書き方とファイル配置、パスの通し方]
date: [2011-02-08T00:05:20+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-407.html]
description: [Yapra のプラグインには legacy なもの class base なもの の 2種類あり、新たに自作する場合はクラスベースな方が推奨されているらしい。 参考: とりあえずネタ振り的なも ...]
--------------------------------
title: [whileループで動き続けるプログラムをログアウト時に終了させる(Ubuntu 10.10)]
date: [2011-02-05T22:07:22+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-406.html]
description: [注)いろいろよく分かってない人が書いてます。 1 環境 2 期待する動作 3 詳細 3.1 SIGHUP は送信されているか?3.2 明示的に SIGHUP を送信する 4 まとめ 5 備考 ...]
--------------------------------
title: [ローカルファイルシステムのファイルをHTTPで取得できるようにする(Ruby/WEBrick)]
date: [2011-02-01T01:10:36+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-405.html]
description: [あるファイルをローカルファイルシステムに置いて別のアプリケーションから利用したいが、 そのアプリケーションはネット上のリソースを使うことを前提としている、という場合があります。 たとえば Fi ...]
$ 

コード


# -*- coding: utf-8 -*-
require 'yapra/plugin/base'

module Yapra::Plugin::Feed

  # description:
  #
  # Data must be a collection of RSS::RDF::Item instance.
  # 
  # example:
  # 
  # - module: Feed::PrintSummary
  #   config: 
  #     reverse: true
  #     size: 10
  #     description_length: 100
  # 
  # config is optional.

  class PrintSummary < Yapra::Plugin::Base
    def shorten(element, length)
      return nil if element.nil?

      chars = element.gsub(/\s+/, " ").strip.split(//u)
      if chars.size > length
        chars = chars[0...(length-4)]
        chars << " ..."
      end

      chars.join("")
    end

    def run(data)
      description_length = config["description_length"] || 200

      summaries = data.map{|item|
        temp_item = item.clone

        if temp_item.description.respond_to? :inner_text
          temp_item.description = temp_item.description.inner_text
        end

        temp_item.description = shorten( temp_item.description,
                                         description_length )

        %w(title date link description).map{|field|
          "#{field}: [%s]\n" % temp_item.send(field)
        }.join("")
      }

      summaries.reverse! if config["reverse"]

      if config["size"]
        summaries = summaries[0...( config["size"] )]
      end

      puts summaries.join("-"*32 + "\n")

      data
    end
  end
end

関連記事


Yapra メモ … その他の Yapra 関連記事についてはこっちにまとめてあります

>> 古い記事: Yapra: クラスベースのプラグインの書き方とファイル配置、パスの通し方
<< 新しい記事: Yapra: hAtomまたはユーザ定義XPathを使ってウェブページをフィードに変換するプラグイン
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。