2012年6月29日金曜日

Yahoo! Pipes の XPath Fetch Page でフィードを出力してないサイトからRSS を配信する

1. Fetch Page から XPATH Fetch Page モジュールへ

http://pipes.yahoo.com/pipes/

Pipes via kwout

Yahoo! Pipes で、フィードを出力してないサイトから RSS を配信するために、Fetch Page モジュールを利用してきた。Fetch Page モジュールは、指定した URL のウェブページを取得するためのモジュール。

現在では、Fetch Page モジュールは、非推奨 (deprecated) となり、代わりに

が登場した。

Fetch Page モジュールは、文字列によりフィードにしたいウェブページの対象を指定した。これに対して、XPATH Fetch Page モジュールは、XPath を利用して指定する。

New Module: XPATH Fetch Page | Yahoo! Pipes Blog によると、

To use the XPATH Fetch Page module, first enter the URL of the site you want. By default, the module will output the DOM elements as items in the preview pane. You can optionally use the “Emit items as string” checkbox if you need the html as a string.

 

2. XPath について

XPathの使い方は、以下を参照

 

3. パイプの例

例えば、Yahoo!モバゲーの日記一覧から、RSS を配信させたいとする。

SnapCrab_NoName_2012-6-27_23-31-48_No-00

作成したパイプは、

全体の構成は下図のとおり。

SnapCrab_NoName_2012-6-29_12-1-22_No-00

以下、作成手順を述べる。

 

4. XPath Fetch Page モジュール

Pipes: Rewire the web にアクセして、Create Pipe ボタンを押す。

最初に、Source > XPath Fetch Page モジュールを配置する。

  1. URL フィールドには、対象となるウェブページの URL を入力する。
  2. Extract using XPath フィールドには、各記事の URL を含んだ記事タイトルを指定する XPath を入力する。
    • //li[@class="lv2-lay"]/a

SnapCrab_NoName_2012-6-27_23-34-25_No-00

 

5. Rename モジュール

作成した XPath Fetch Page モジュールをクリックして選択すると、以下のような出力がされる。

SnapCrab_NoName_2012-6-28_14-45-9_No-00

href は、記事の URL を表す。 content は、記事のタイトルを表す。

この出力を RSS に変換するには、

  • href ⇒ link
  • content ⇒ title

のように変更したい。

RSS(RDF Site Summary)によるサイト情報の要約と公開 によると、

SS 1.0はサイトの情報を簡便に伝えられるよう、次のような簡単な基本構造を持ちます。

http://www.kanzaki.com/docs/sw/rss.html#construct

RSS(RDF Site Summary)によるサイト情報の要約と公開 via kwout

出力を変換するために、Operator > Rename モジュールを配置し、XPath Fetch Page の出力を入力とする。

Rename モジュールのフィールドには、以下のように設定する。

  • item.href ⇒ Rename, link
  • item.content ⇒ Rename, title

SnapCrab_NoName_2012-6-29_1-56-4_No-00

item.href, item.content という値は、Rename モジュールへ入力する前の XPath Fetch Page の出力を見て判断する。(フィールドには、href, content を入力すると、自動的に item. が付けられる。)

Rename モジュールを通すことにより、以下のような出力となる。

SnapCrab_NoName_2012-6-29_2-4-23_No-00

 

6. Loop モジュール

ここまでの操作により、各記事の URL が取得できた。次に、この情報を利用して、記事の内容を取得する。

方法は、Oprator > Loop モジュールを使い、取得した各 URL ごとに、再び Source > XPath Fetch Page モジュールで内容を取得する。

パイプの配置は、Loop モジュールの中に XPath Fetch Page モジュールを置く。

XPath Fetch Page モジュールに設定する値は、

  • URL: item.link
  • Extract using XPath: //li[@class="blk4-lay"]
  • Emit item as String にチェックをつける。

Loop モジュールの出力は、RSS の構造に沿うために、

  • assgin all results to item.description

と設定した。

SnapCrab_NoName_2012-6-29_2-6-57_No-00

これにより、Loop モジュールの出力が以下のようになる。

SnapCrab_NoName_2012-6-29_2-19-18_No-00

後は、このパイプを保存し、実行する。

Yahoo! Pipes の XPath Fetch Page でフィードを出力してないサイトからRSS を配信する (2) つづく…

5コメント:

Unknown さんのコメント...

はじめまして、yahoopipesについて質問させてもらっても良いでしょうか?

yahoopipesの管理画面上に「Pipe Web Address」という項目があり、ここに作成したパイプのRSSが記載されていると思います。

このRSSをリーダーで読み込むと、fetch feedに登録したサイトへのリンクが作られます。
RSSリーダー⇒登録サイト

ただ、pipesを使ってアンテナサイトを作成したいと思っておりますので、以下のように間にアンテナサイトを挟みたいと思っております。

RSSリーダー⇒アンテナサイト⇒登録サイト

私の作ったパイプのRSSは「http://pipes.yahoo.com/pipes/pipe.info?_id=b6de7d0486e8ae96c30b26c60b635896」なのですが、各登録サイトではなく、アンテナサイト側に飛ぶように修正できないものでしょうか?

ご存知でしたら、教えていただけるとありがたいです。

Jute Memo さんのコメント...

pipes が出力する RSS の各アイテムにある link 属性を設定する方法を調べてみてはどうでしょうか。

Unknown さんのコメント...

回答ありがとうございます。リンク属性を設定するというのは、pipesの管理画面上から設定出来るのでしょうか?

Jute Memo さんのコメント...

pipes が出力する RSS の各アイテムにおけるリンク先をアンテナサイトにしたい、と理解したのですが、その場合、各アイテムのリンク先を表す link 属性を Regex のようなモジュールで書き換えるればできるかもしれません。
ただ、その場合、どのようにしてリンク先をアンテナサイトに合わせるか問題となる気がします。
また、アンテナサイト側で、元の登録サイトに飛ばすための方法も必要となるでしょうが、それをどうするか、ややこしそうですね。

Unknown さんのコメント...

回答ありがとうございます、難しそうですか、、、。ワードプレスを使えば出来そうなのですが、軟弱なサーバを使っている関係から、pipesとライブドアブログで実現したかったのですが、あきらめます。
ありがとうございました(´・ω・`)