でブログ一覧から巡回の試行錯誤
windowsにPlaggerを入れた
assetsをコピーしたり、yamlの記法でタブが駄目だったり「:」の後に半角スペースが必要だったりにつまずきつつもBliglineからgmailもうまくいった。
参考にしたサイトはb:id:serian:t:plaggerに。
で、最初の応用。
某ランキングサイトからそこのリストにあるブログのRSSフィードを取ってきたい。
そこには、
<td class="hoge">~~<a href="/jump.php?9999;http%3a%2f%2fblog%2efoo%2ecom%2fbar" class="fuga99">~~</td>
なんて形で、ブログへのリンクが書いてある。
99とか書いてある数字は可変。
相対パスで、さらにジャンプの形式で、URLエンコードされている。
入力
まず、Filter::EntryFullText の設定ファイルを書いてみる - SmallStyle(2006-08-31)を読んで、フィルターのEntryFullTextを使うのかと思った。
でも、これは、特定のエントリ自体を取ってきてくれる機能を使ったものだった。
まー当たり前か。
で、Subscriptionを漁る。
どうやらSubscription::XPathが使えそう。
XPathの書式で狙うと、全部列挙して、取ってきてくれそうだ。
まず、
- module: Subscription::XPath config: url: http://foo.com/bar.html xpath: //td[attribute::class="hoge"]//a
とやってみる。
その辺りの部分から勝手にURLを探してくれるみたいだ。
しかし、/jump.php?の部分から切り出してしまって、エラーになる。
仕方ないので、
XPath.pmをいじる。
サブルーチンfind_feedの$hrefがそれっぽい。
適当なところに、
$href = substr( $href, index( $href,'http' ) )
と入れてみる。
しかし、なにも変わらない。
どうやら、キャッシュでもされる感じ。
MYXPath.pmとか名前で新規作成する。
すると今度は、URLエンコードされてて、読めないらしくエラーとなる。
そこで、
$href =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/ego;
を適当なところで入れて、デコード。
やっとうまく取れる。
本当は、パスを絶対化するべきなんだろうな。
出力
全部一つにまとめて、一つのファイルにタイトルと、本文とカテゴリーが欲しい。
Filter::CompositeFeedとPublish::CSVを試す。
しかし、なんだか出力がおかしい。
Filter::CompositeFeedは違うっぽい。
結局、
- module: Publish::CSV config: dir: .\ encoding: shift-jis filename: out.csv mode: append column: - title_text - body_text
だけでよかった。
columnは、Plagger::Entryの中で定義されてるものを書けばいいみたい。
カテゴリーとかないんだなー。