スクレイピングをやっていきたいと思ったので、「Plagger」を使ってみることにしました。
色々なところで言われている通り、ドキュメントが少ないです。
分かりやすい解説もあるのですが、その通りにやっても正常に動かなかったりしました。
ってことなので、ここに書くことも「自分がうまくいったケース」に過ぎないと思います。
Plaggerインストール
流れとしては、
cpanコマンドでPlaggerのインストールを試みる
↓
依存モジュールがなかったり入らなかったりして失敗する
↓
cpanコマンドで依存モジュールをインストール、テストで入らなかったらforce install
それかCpanサイトに行ってDLしてコンパイルしてインストールする
という感じでやっていきます。
無事にインストールできたら「plagger -v」でバージョンチェックできると思います。
参考にさせていただいたサイトはこちらです。
- MacOS XにPlaggerインストール
- test Plaggerで、必要なモジュールを調べてゴリゴリとインストールしていきます。
Plaggerの使い方
Plaggerがどういうものかは、下記の記事を読んで掴みました。
一足早く「Plagger」の便利さを実感してみよう
最初の3ページでなんとなく概要が分かります。
後半の2ページで素直に実行できればいいのですが、そううまく行かない。
実際の使い方は、下記のページの「いまPla その1」を参考にして、動作確認を行ないました。
いまPla もくじ。
けど、やっぱり素直に上手くいかなかったです。ってことで、自分が辿った作業をメモしていきたいと思います。
Filter::EntryFullText(EFT)の設定ファイルを作成
Plaggerが取ってきたデータに対して行なうフィルタの設定ファイルを作成します。
下記の設定を「filter_yahoo.yaml」という名前で作成しました。
author: memememomo custom_feed_handle: http://www\.yomiuri\.co\.jp/science/ custom_feed_follow_link: /science/news handle: http://www\.yomiuri\.co\.jp/science/news/ extract: <!--// headline_start //-->(.*?)<!--// article_end //--> extract_capture: body
このファイルを「assets/plugin/Filter-EntryFullText/」に置けばいいらしいのですが、どこかよくわかりませんでした。検索しても出てこないし・・・。
こちらの記事によると、Plaggerのソースからassetsディレクトリを持ってくると良い、といったことが書いてあったので、CPANサイトからソースをダウンロードして、その中にあるassetsディレクトリをそのまま「~/plagger」に移しました。
これで無事に「assets/plugin/Filter-EntryFullText/」に「filter_yahoo.yaml」を置くことができました。
次にPlaggerに読み込ませる設定ファイル「config.yaml」を作成しました。
global: assets_path: ~/plagger/assets timezone: Asia/Tokyo log: level: debug plugins: - module: Subscription::Config config: feed: - url: http://www.yomiuri.co.jp/science/ - module: Filter::Rule rule: module: Deduped - module: Filter::EntryFullText config: store_html_on_failure: 1 - module: Widget::HatenaBookmark - module: Filter::HatenaBookmarkUsersCount - module: Widget::HatenaBookmarkUsersCount - module: Filter::BreakEntriesToFeeds - module: Publish::Gmail config: mailto: xxx@gmail.com mailfrom: xxx+plagger@gmail.com
そして、Plaggerを実行します。
「plagger -c config.yaml」
正常に動作すると「Public::Gmail」部分で設定したメールアドレスにニュースが届くようになります。
エラーメモ
上記のようにできるまでに遭遇したエラーメモです。
「Plagger [error] http://www.yomiuri.co.jp/science/ is not aggregated by any aggregator」エラーメッセージ
このようなエラーが出て、メールが送られない現象がありました。
これは、単純に「filter_yahoo.yaml」の置き場所と
「config.yaml」での「assets_path:」の指定の仕方が悪かったみたいです。
つまり、Filter::EntryFullTextが設定ファイルをうまく読み込めていなかった、ということです。
もし、「filter_yahoo.yaml」の「custom_feed_handle:」の値と、
「config.yaml」の「feed: -url:」の値が一致していなければ、
うまく読み込まれないので、同じエラーメッセージがでると思われます。
エラーは出なくなったけど、メールが届かない
データ取得がうまくいくと、データはキャッシュされるようになります。
キャッシュされる場所は「~/.plagger」です。
「config.yaml」の
- module: Filter::Rule rule: module: Deduped
という指定をしていると、新しく取ってきたデータとキャッシュデータを比べて、相互に違いがなければメールが送信されません。
うまく行っているけどメール送信がされない、と思ったら、この指定を一回消してから実行するといいかもしれません。
普段は、同じ内容のメールが届かないように、指定をしてある状態にしておいた方がいいでしょう。