LDR&Fastladderの中の人から「これ面白そうだから、OpenFLで使ってみようよ。ていうか作ってよ」と大変無茶振りをされたのでYet Another PraggerでFastladderのクローラを書いてみた。

YapraかわいいよYapra

使ってみた感想としては良い感じ。Class-basedなプラグインなところが本家PRaggerより好みだし、でもlegacyなプラグインも読み込める互換性が使い勝手がいい。あと「実行時に使うプラグインだけ読み込む」ってことをしてくれるのも素敵。

肝心のFastladderのクローラは

iDiskに置いといたので興味のある方は持ってってください。展開したら中身をlib-plugin/yapra/plugin以下あたりに配置すると使えると思います。YapraはYuanyingさんのところから。ちなみにconfig.yamlのサンプルはこんな感じ。

- module: Fastladder::Config
  config:
    root: /path/to/fastladder/root
    environment: development
- module: Fastladder::CrawlTarget
- module: Fastladder::Fetch
- module: Fastladder::Store

最初のConfigでfastladderのパスとRAILS_ENVを指定して初期化して、CrawlTargetでDBからFetch対象のフィードを選んで、Fetchでフィードを取得、StoreでDB内のデータを更新、という流れでございます。んで、なんでわざわざPragger(Yapra)で作ってみたかというと、プラグイン形式のものにクローラを置き換えることを検討しているので。

例えば今のクローラは単順に古いのから順にフィードの取得をしに行くんだけど、もっと賢く(更新頻度が高いフィードや購読者が多いフィードを優先してフェッチする、とか)したければCrawlTargetだけ別なプラグインと置き替えてやればいい。例えばフィードを全文表示に展開するとか広告を除去するとか特定の記事だけを抽出するとかそういうフィルタをかけたければ、FetchとStoreの間にフィルタプラグインを挟んでやればいい。とか、そういうことがやりやすくなるかなと。

まぁPlaggerで既にやってる人は多々いると思うんだけど、正直Plaggerはインストールの敷居が高いし、同じRubyで書ける方がとっつきやすい人もいるだろうなと思うので、もしプラグイン風のクローラを採用するとしたらPraggerかYapraかなーという感じかなぁと話してるところです。Praggerくらいのサイズなら同梱できちゃいそうだし、なんならそれっぽい機構のものを再発明するのもありかも。

まあ一応念の為

これはあくまで「試しに作ってみた」だけのものなので。「添付のクローラより格段にすごい!」とか「PlaggerのStore::Fastladderなんか目じゃないぜ」みたいなものではありません。正直中でやってることは添付のクローラをほぼそのまま移植しただけなので、あちこちアレなところも直してないですし、fastladder本体にいろいろ依存してるので大変気持ちの悪い箇所が多々あります。今のところ既存のPraggerプラグインとの連携もできてないし、便利プラグインも作ってないです。あくまで試作品ですのでご了承下さい。

てか誰か作ってくれないかな。よさげなもの。上の試作品を完成させてくれちゃっても良いよ!(他力本願)

追記

流石にiDiskに置いとくのはアレなので、とりあえずgithubに上げときました。ついでにまた少しいじった。