muzieのRSS作成手順
ベース
Yahoo! Pipes の Page Fetch モジュールでスクレイピングし放題 - てっく煮ブログ 跡地にて、「RSS配信してなくてもPipesでRSSを作成できる」という話題、すなわち「それPipes」を見たので、「それならば、muzieもこれでチェックできるんじゃなかろうか(muzieはRSSに対応してないっぽく、さらに"なんでもRSS"では更新しすぎる)」ということでやってみる。
手順
サンプルコード解析
さきほどのページでリンクされてたPipesのページに移行。
「View Source→Save a copy」で自分のところに持ってきたが、「Clone」で一発だったのかもしれない。まぁ、どうせコードを見るので気にしない。
で、先ほどのページの解説を読みながらコードを眺める。
RSSは基本的にただのXMLだったはずなので、その構造の解説を探したところRSSを配信しよう - phaのPHPとか自習室 - はてな自習室で紹介されていた。で、これらをもとに見ていくと、だいたい以下のような処理をしている模様。
muzieのHTML解析
今回はhttp://www.muzie.co.jp/cgi-bin/artist.cgi?id=a047541をサンプルとして解析する。他のmuzieのページも同じ構造のはず。
「右クリック→ページのソースを表示」と実際のページを比べつつ、どれを「タイトル」「リンク」「要約」にするかを考える。上方にある「最新の楽曲」っぽいのでも良かったが、ひとまず下のほうにある「楽曲一覧」っぽいところをRSS化する。
「タイトル」についてはそのまま「TITLE:」のところで良いだろう。「要約」もその下にある文章で良い。だが「リンク」はどうすべきか。迷った挙句、「MP3ダウンロード」のリンクを選ぶことにした。(リンク先はあとで修正されました)
コンバート
さきほどクローンした部分を以下のように変更する。(<と>は実際には半角の方)
- このPipeのタイトルと説明
- 左上の名称と、右上のPropertiesの中身を変更する
- Fetch Page
- URLを今回のページにさしかえる
- 「main02」の中が楽曲一覧のようなので、Cut 〜では「<div id="main02">」から終端までを選ぶ
- 「"marr04 marl04"」が1楽曲のようなので、Split 〜では「<divclass="marr04 marl04">」とする
- Rename
- ここはサンプルコードと全く同じ
- Regex
- title
- 場所
- 「TITLE:」の先を指定すればよい
- 基本的な考え方
- 「〜」「TITLE:」「ここを採用」「〜」
- HTMLでの対応
- 「〜」「TITLE:</span>」「ここを採用」「</strong>〜」
- 正規表現(実際には、変なものを捕まえないようにもう少し長い)
- 「.*」「TITLE:</span>」「([^<]+)」「.*」
- 場所
- link
- 場所
- MP3と書いてるボタンのリンク先を指定する
- 基本的な考え方
- 「〜」「ボタンのリンク先を採用」「〜」
- HTMLでの対応
- 「〜」「<a href=/download/〜>と書いてあるところを採用」「〜」
- 正規表現(変なのを捕まえないように長くしたいところ)
- 「.*」「download([^>]+)」「.*」
- downloadから先のURLは$1として取得できたので、あとはそれをつなぐ
- http://www.muzie.co.jp/download$1
- 場所
- description
- 場所
- 共通表示の下にある文章
- 基本的な考え方
- 「〜」「あの文章を採用」「〜」
- HTMLでの対応
- 「〜」「<div class=listentxt>の中の最初の<p>の中を採用」「〜」
- 正規表現
- 「.*」「<div class=listentxt><p>と</p>の間」「.*」
- サンプルと同じ感じで、「<div class=listentxt><p>以前を削除」「</p>以降を削除」として抽出
- 場所
- title
- Filter
- 必要ないかもしれないけど、一応サンプルコードのまま入れておくことにする
実行確認&修正
さっそく確認したところ、以下の問題を確認。
- リンク先に飛べない
- エラーページに飛ばされる
- 他のidのページも確認したい場合に追加が面倒
- 処理全体をまるまるコピーする必要がある
ということで、以下の変更を加える
- リンク先をベースとなるページに変更
- 曲一覧のところを指定しても良かったかも
- 処理部分をモジュール化し、URLの指定だけ外部から受け取るようにした
- User inputsのURL Inputを利用
で、できたのが以下。
使い方
自分で指定したページのRSS配信を行いたい場合、以下のようにして行います。
- モジュールのコピー
- http://pipes.yahoo.com/pipes/pipe.info?_id=70e1f5c5852707e3a89225f09731bd2cから、「Clone」でおそらくコピーできます。(ダメなら「View Source→Save a copy」で)
- モジュールを呼んで、結果をUnionでつないで出力