CNN.co.jp こぼれ話RSS化+全文配信化しました。http://pipes.yahoo.com/gebet/cnn_fringe_rss
活字中毒R。をRSS化+全文配信化。やってることはそんなにかわらない。
http://pipes.yahoo.com/gebet/katsuji_rss
プログラミングとか全くわからないぼくが
Yahoo!pipesでここまでできる、というのを報告。
そもそもなにするものぞ?
詳しくはよくわからないですけどRSSとかで遊べるらしい。
フィード広告を削除したRSSを発行できたり、RSSを纏めたり、全文配信してないサイトもlinkたどって全文配信RSSにできたり、
RSS配信してないサイトもhtmlを読み取ってRSS配信させるように出来るとか、市バス路線図のAPIを作らはる方まで。すごい。
plaggerとかよくわからんとかいう方でも野良RSSを作成できるのが革命的。
フィードまとめたり削除したり
Fetch Feedからスタートして、
FilterモジュールとかUnionモジュール、Uniqueモジュールなどを用いましょう。英語だからとっつきにくいとかあるかもですが割となんとかなります。これは省略。
全文配信化
これは汎用的なのを作ってらっしゃる方がいらっしゃいますのでそれを利用しない手はない。
フィードのRSSをいれて、本文の開始タグ、終了タグを指定します。
Pipes: 全文配信API(全文配信化)
アメブロ全文配信 RSSのURLをいれます。
Pipes: Ameblo Content All
はてなダイアリー全文配信 はてなダイアリーのURLをいれます。
Pipes: old style d.hatena EFT
広告削除とかと組み合わせてもおもしろいかもしれませんね。
RSS配信してないサイトをRSS化+全文配信
本題に入ります。
ちょくちょくおもしろい話を提供してくれるCNN.co.jp:こぼれ話ですが、
RSSが提供されていなかったため、読む機会が減少していました。
というわけでこんな感じでスクレイピングしてみました。
よくわからんだろがーという方もいらっしゃるとはおもいますので
誰でも出来るように解説します。よくわかってないとこもありますのでツッコミお願いします。
- Fetch Pageモジュールでページを取得して配列に
- Renameモジュールで属性付与
- Regexモジュールでタイトルとリンクを取得
- Loop + Fetch Pageモジュールで全文配信化
ソースURLには一覧ページを指定します。
この場合は http://www.cnn.co.jp/fringe/fringe.html になります。
取ってくる範囲をhtmlソースから指定します。
ここでは
<div class="newsTitle"><h2>こぼれ話</h2></div> から </ul>
までとしています。</div>までとするとなぜかうまくいきませんでした。
その後配列として何によって分割するか、を指定します。これは一ニュース毎の末尾にある</li>になります。
このままでは分けただけですのでデータとしては使えません。
item.content に対して タイトル(title) リンク(link) 本文(description) ポストした日付(pubDate) をキャプチャのように設定して付与します。
Renameというのは上書き、Copy Asというのは元データを保持?なのかな。
ここでぼくは日付の設定の仕方がよく分からなかったので無視してます、
どうやってやるんだろ。
正規表現モジュール!ここでぼくもよくわからなかったのですが、他人のソースをちょっと覗き見させて頂き、参考にしました。
()で囲った部分をreplaceするみたいです。
$1 っていうのは1番めに合致する部分、という意味なんだそうです。
二番めなら $2 になるらしい。
g s m i っていうのは正規表現のオプションなんだとか。
item.link に対して .*href="([^"]*)".* with $1
.*というのは何でもいい文字列で、hrefのあとの""の中の"を含まない任意の文字列をurlとして取ってくるということを示しています。
正規表現の基礎に関しては、ここがよくわかった気がします。
http://www.mnet.ne.jp/~nakama/
同じくtitleはaタグ内の文字列をとってくる(この時<と>を含まない)という正規表現を使っています。これは以下のサイト
ある文字列を含まない正規表現
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NOTINCLUDED
により生成したものを用いたりしました。なぜか<img~も取ってきてしまっていたので消去するような処理にしました。賢くないな…
Loopモジュールを設置し、そこにFetch Pageをドラッグして設置します。
URLに item.link を指定することでさっき取得したリンクからデータをとることが可能になります。
そこで個別ニュースページのhtmlソースを見て、どこからどこまでが本文なのか、汎用的な範囲を1.の時と同じようにして指定します。
試行錯誤がちょっといるかも。写真アリとナシのニュースでちょっと構造が違ったので時間くいました。
この時Splitはしないので空欄で。
最後は出力をdescriptionにして終了です。
これまでの手順はcloserさんの
青空文庫の新着補足pipesを全面的に参考にさせて頂いております。
ありがとうございます。
http://pipes.yahoo.com/closer_nabeshimaeido/aozorabunko
めんどくさそうに見えますが意外と簡単です。
勝手にRSSをみんなで作りましょうーとかいってはみるものの統一した方がいいのでしょうね。
で、相変わらず日付のいれ方が分かりません。
ほんとは入れなきゃいけないんだろうけど。
item.pubDate よくわかんないよー。
タグ:pipes
【ネットの最新記事】



