特定のキーワードにマッチした内容の記事をTumblrやMovableTypeに自動的に投稿する
via 特定のキーワードにマッチした内容の記事をTumblrやMovableTypeに自動的に投稿する@空即是色
ぷ.jpの活動にインスパイアされたので、RSSフィードから、特定のキーワードにマッチした内容の記事をTumblrやMovableTypeに自動的に投稿するプログラムを作ってみた。 例えば、自分がよく読むブログからprocessingに関連した記事を抽出してTumblrに自動的にブックマークする。と言ったことができたり、MovableTypeに自動的に投稿して紹介することでprocessingの日本語情報ポータルを運営する。と言ったことができると思う。 汎用的に使えるようにプログラミングしたつもりなので、いろいろ弄って自分用にカスタマイズしてみるとよいかも。 RSSフィードはRSS0.9とRSS1.0に対応。 投稿先のCMSは、メールで記事を投稿できる機能があるものであれば特に問わず。4 years ago • 0 notesデモ
nogamiのRSSリーダーから/ぷ.jp|ぷろせっしんぐ.jp|processing.org|processing.jp|processing|p5/にマッチする記事を抽出してTumblrに投稿してみた例。ダウンロード
ライセンスはCC GNU GPLで配布。ファイルの構成
- autofilter.php(本プログラムの本体)
- lastentry.dat(過去に投稿したエントリの履歴を保存しておく為のファイル)
- magpierss(RSS パーサー)
使い方(はてなRSSリーダーに登録した記事の中からprocessingに関連するものを抽出してTumblrに投稿する場合)
(※1) Tumblrの場合は、Account → Extras → Mobile Postingに投稿用のメールアドレスが記されているはず。
- 自分のはてなRSSリーダーにソースとなるブログや動画を登録。
- ダウンロードしたファイルのautofilter.phpをテキストエディタで開いて以下の部分を編集。
// 抽出したい記事に含まれていそうなキーワードの一覧(正規表現) $filter = "/ぷ.jp|ぷろせっしんぐ.jp|processing.org|processing.jp|processing|p5/"; // 投稿先のメールアドレス(※1) $mailAddress = "自分のTumblrの投稿先メールアドレス"; // 記事のRSS(RSS0.9とRSS1.0に対応) $rssPath = "http://r.hatena.ne.jp/(自分のはてなID)/rss"; // 投稿履歴を保存しておく為のファイル $lastEntryDataPath = "lastentry.dat";- 保存してサーバーにファイルを全てアップロード。
- cronを設定して定期的にautofilter.phpを実行する。
- お茶でも飲みながら待つ。
いろいろな使い方
上記は、はてなRSSリーダーからTumblrに投稿する場合の例だけど、他にもこんな使い方ができると思ふ。
- ソースとなるRSSフィードの例
- RSSリーダー
- ニュース検索
- ブログ検索
- 動画
- ソーシャルブックマーク
- 誰かのブログ
- 誰かのWiki
お奨めは、はてなRSSリーダーを使って、ある程度ソースを精査してからキーワードでフィルタリングした記事をTumblrやMovableTypeに投稿する方法。 この方法だと、はてなRSSリーダーでソースの管理ができるし、RSS0.9とRSS1.0以外(ATOMとか)の記事も対象にできると思うので。
- 投稿先の例
- Tumblr
- MovableType ※MTmailを使用
- 自分のメールアドレスとかどっかのコミュニティのメーリングリスト
複数のソース(RSS)から抽出する場合
はてなRSSリーダーを使わず直接特定の複数のブログからぶっこ抜きたいという人にはこんな方法もご紹介。 autofilter.phpのmainプログラム部分を次のように修正。// 記事のRSS(RSS0.9とRSS1.0に対応) $rssPathArr = array( "http://feeds.japan.cnet.com/cnet/rss", "http://rss.rssad.jp/rss/itmatmarkit/rss2dc.xml", "http://www.pheedo.jp/f/slashdot_japan" );
foreach($rssPathArr as $rssPath){ $autoFilter = new AutoFilter($filter, $mailAddress, $rssPath, $lastEntryDataPath); if($autoFilter->load()){ $autoFilter->update(); } }