2012年6月30日土曜日

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

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

1. パイプをどのサイトでも使えるように変更する

前回、フィードを配信していない「特定のサイト」から RSS を配信した。

今回は、上記のパイプを、どのサイトでも使えるように変更した。

SnapCrab_NoName_2012-6-30_12-7-56_No-00

例えば、Yahoo!モバゲー の場合、「○○○○ さんの日記」のページを対象としてパイプを実行する。パイプのフィールドに入力する値は以下の通り。

ブログの各記事へリンクを含むページの URL http://yahoo-mbga.jp/XXXXXX/diary
ブログのタイトル一覧を取得するXPath //li[@class="lv2-lay"]/a
ブログの内容を取得するXPath //li[@class="blk4-lay"]

GREE の場合、「日記」のページを対象としてパイプを実行する。

ブログの各記事へリンクを含むページの URL http://gree.jp/XXXXXX/blog
ブログのタイトル一覧を取得するXPath //h1[@class="title"]/a
ブログの内容を取得するXPath //*[@class="maincol"]//*[@class="content"]
記事から削除する内容(正規表現) <div class="footlink">.*?</div>

Amebaなう の場合は、以下の通り。

ブログの各記事へリンクを含むページの URL http://now.ameba.jp/XXXXXX/
ブログのタイトル一覧を取得するXPath //span[@class="status"]/a
ブログの内容を取得するXPath //li[@class="now"]//p[@class="content"]
記事から削除する内容(正規表現) <span class="status">.*?</span>

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

 

2. モジュールを独立させる

SnapCrab_NoName_2012-6-29_12-1-22_No-00最初に、ウェブページから、各記事のタイトルと URL を含むパイプを独立させる。

前回作成したパイプのソースを開き、Save a copy により、新しいパイプを作成する。

Loop モジュールを削除し、Rename モジュールから Pipe Output へパイプを繋ぐ。

 

ユーザからの入力を受け付ける Input モジュール

対象となるブログの URL と、各記事の URL とタイトルを指定するための XPath をユーザが指定できるように変更する。

  • User Input >
    • URL Input モジュール
    • Text Input モジュール

を配置する。

Input 系のモジュールの

  • Name フィールドは、作成したパイプのフォームのパラメータ名となる。
  • Prompt は、フォームにおけるフィールドのラベル名となる。
  • Position は、フォームにおけるフィールドが表示される順番を表す。

次に、Input モジュールから、XPath Fetch Page モジュールのフィールドにパイプを繋げる。

SnapCrab_NoName_2012-6-30_1-17-12_No-00

独立させたパイプは、以下のもの。

 

3. 作成したモジュールを配置する

先ほどと同じく、前回作成したパイプのソースを開き、Save a copy により、新しいパイプを作成する。

  • XPath Fetch Page モジュール
  • Rename モジュール

を削除し、上記で作成したモジュールと置きかえる。

自分で作成したパイプは、

  • My pipes > ブログ記事のタイトルと URL の一覧を取得する

より配置する。

このとき、ユーザからの入力を受け入れるために、User Input より、URL Input, Text Input モジュールを置く。

SnapCrab_NoName_2012-6-30_1-34-46_No-00

Loop モジュールで使う、XPath もユーザの入力を受け取るようにする。

SnapCrab_NoName_2012-6-30_1-52-53_No-00

 

4. Regex モジュールで不必要な文字を削除する

上記に加えて、各記事の内容から、特定の文字列を削除するために Regex モジュールを追加する。この際、正規表現で削除対象を指定する。

Operator > Regex を配置し、Loop モジュールの出力を Regex モジュールに入力する。 User Inputs より、Text Input を配置し、Regex モジュールの replace に繋ぐ。

SnapCrab_NoName_2012-6-30_1-57-11_No-00

これで出来上がり。

SnapCrab_NoName_2012-6-30_23-55-56_No-00