proglog

主にプログラミングに関する断片的メモ

でブログ一覧から巡回の試行錯誤

windowsPlaggerを入れた
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の中で定義されてるものを書けばいいみたい。
カテゴリーとかないんだなー。