前から試そう,試そうと思っていた話題の Plagger を導入してみました.mixi のマイミクの方とかはこれから足あとがつきまくると思いますが,気にしないで下さい.
Plagger をご存知無い方は,この辺りでも.
一足早く「Plagger」の便利さを実感してみよう - @IT
plagger - otsune FreeStyleWiki
要は,「いろいろな」データを入力して,加工して,「いろいろな」ものに出力するフレームワーク.「いろいろな」というところがポイントで,誰かが MacBook を勝手に持ち出したら携帯にメールする とか,Google で「はらへった」と検索してピザを注文する なんて人まで.
Plagger については,既にネット上にインストール方法や設定方法がたくさんあるので,わざわざここで書くことはないんだけど,ひとまず自分の備忘録を兼ねて書いておきます.
- RSS を整理
まずは RSS の整理から.
私は RSS リーダーに Google Reader を使っているが,Bloglines のフィードリストをアップデートしようとして「Google Reader で OPML をエクスポート → Bloglines でインポート」すると,変な名前のフォルダとか勝手にできて上手くいかなかった.
結論としては,livedoor Reader を踏み台にして,「Google Reader で OPML をエクスポート → livedoor Reader でインポート → エクスポート → それを Bloglines でインポート」すると,OK だった.
…って後から考えれば,livedoor Reader にエクスポートした時点で,Subscription::LivedoorReader を使えば十分だったのだが.
- さくらインターネットのレンタルサーバーを契約
Plagger を導入するのは自宅の環境でも良かったのだが,常時稼働環境が望ましいことと,2週間の無料お試し期間があるということで,さくらのレンタルサーバーで試してみる.
SAKURA Internetのレンタルサーバ
SAKURA Internet : レンタルサーバ 概要
さくらのレンタルサーバ非公式FAQ
とりあえずお約束で,vim をコンパイルして $HOME 以下にインストールしたり,"chsh -s /usr/local/bin/zsh" したりと設定に小一時間.
- CPAN の設定
ポイントは,root 権限が無いレンタルサーバーなので,$HOME 以下にインストールすることだが,otsune さんの記事 が非常に参考になった.というかほぼこの通りにしただけだが,一応やったことは以下の通り.
$ mkdir -p ~/local
$ echo no | cpan
$ vim ~/.cpan/CPAN/MyConfig.pm
MyConfig.pm の内容を以下に書き変える (mbuildpl_argの項目は存在しないので追加する).
'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local],
'makepl_arg' => qq[INSTALLDIRS=site LIB=$ENV{HOME}/local/lib/perl5 PREFIX=$ENV{HOME}/local],
'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local],
'urllist' => [q[ftp://ftp.cpan.jp/], q[ftp://ftp.kddilabs.jp/CPAN/]],
必要な環境変数を追加する.
前述の通り,私はシェルを zsh に変更したが,さくらインターネットのサーバーは FreeBSD でデフォルトは csh なので,以下では .cshrc を変更する例を紹介しておく.
$ echo 'setenv PATH $HOME/local/bin:$PATH' >> ~/.cshrc
$ echo 'setenv PERL5LIB $HOME/local/lib/perl5:$HOME/local/lib/perl5/site_perl' >> ~/.cshrc
$ echo 'setenv PKG_DBDIR $HOME/local/var/db/pkg' >> ~/.cshrc
$ echo 'setenv PORT_DBDIR $HOME/local/var/db/pkg' >> ~/.cshrc
$ echo 'setenv INSTALL_AS_USER' >> ~/.cshrc
$ echo 'setenv LD_LIBRARY_PATH $HOME/local/lib' >> ~/.cshrc
$ source ~/.cshrc
$ mkdir -p ~/local/var/db/pkg
CPAN を最新に更新.
$ cpan -i Bundle::CPAN
$ cpan
質問には全てEnter で.
最後に
cpan> o conf commit
を忘れないように.
- Plagger のインストール
ネット上には,Template,DateTime::TimeZone,DateTime::Format::Mail,Encode::Detect あたりでつまづくとの記事が多く見られたが,今日時点の環境ではどれも問題無かった.というわけで素直に,
cpan> install Plagger
するだけ.ここも質問は全て Enter でデフォルト値を受け入れる.
後から必要になったモジュールは,
cpan> install WWW::Mixi
cpan> install URI::Find
cpan> install WWW::Mechanize
cpan> install Image::Info
のあたり.
assets はどこか適当な場所にコピーしておく (後から yaml の global で読み込む).
cp -r ~/.cpan/build/Plagger-0.7.17/assets ~/plagger
- Plagger の設定
yaml はインデント構造を保持することと,最終行に改行を入れておくことに注意.
メール配信は,Gmail の smtp を使っていたのだが,遊びすぎて
Data failed: 550 5.4.5 Daily sending quota exceeded. v50smxxxxxxxxx
とか怒られてしまったので,さくらインターネットの smtp を使っている.さくらの smtp は POP before SMTP なので,POP のアカウントも記述しておくことに注意.
base.yaml:
全てから読み込む共通設定.
最初はメール送信部分やレシピ定義などをしていたが,結局 global だけになったのであまり意味がない.
global:
plugin_path:
- /home/<username>/local/lib/perl5/Plagger/Plugin
assets_path: /home/<username>/plagger/assets
timezone: Asia/Tokyo
log:
# level: debug
level: info
cache:
base: /home/<username>/plagger
define_recipes:
bloglines.yaml:
Bloglines のフィードを Gmail へ.
Bloglines や del.icio.us へのリンクを追加したり,はてブ数や page rank を表示させたり,全文配信しないフィードの全文取得をしたり,余計な広告を除去したり…などなど.メール配信は Bloglines のフォルダ別にアドレスを分けて,後で Gmail でフィルタできるようにしている.
include:
- /home/<username>/plagger/.yaml/base.yaml
plugins:
- module: Subscription::Bloglines
config:
username: XXX
password: base64::XXX
mark_read: 1
fetch_meta: 1
- module: Widget::Simple
config:
widget: bloglines
- module: Widget::Simple
config:
widget: delicious
- module: Widget::Simple
config:
widget: hatena_bookmark_users
# - module: Widget::Simple
# config:
# widget: livedoor_clip_users
# - module: Widget::Simple
# config:
# widget: delicious_bookmark_users
- module: Widget::Simple
config:
widget: google_pagerank
# - module: Filter::BreakEntriesToFeeds
- module: Filter::EntryFullText
- module: Filter::ImageInfo
- module: Filter::ResolveRelativeLink
- module: Filter::StripRSSAd
- module: Filter::TTP
- module: Filter::TruePermalink
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('alpha')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('ce')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('music')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('peace-pipe')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('personal')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
- module: Publish::Gmail
rule:
expression: $args->{feed}->has_tag('topics')
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
# - module: Publish::Gmail
# config:
# mailto: [email protected]
# mailfrom: [email protected]
# mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
# via: smtp
# host: <domain>.sakura.ne.jp
# username: XXX@<domain>.sakura.ne.jp
# password: base64::XXX
# pop3:
# host: <domain>.sakura.ne.jp
# username: XXX@<domain>.sakura.ne.jp
# password: base64::XXX
mixi.yaml:
mixi の日記を Gmail で読む.メッセージとかも取得できるようだが,ひとまず日記だけ.
include:
- /home/<username>/plagger/.yaml/base.yaml
plugins:
- module: CustomFeed::Mixi
config:
email: XXX
password: base64::XXX
fetch_body: 1
fetch_body_internal: 1.5
fetch_items: 10
show_icon: 1
feed_type:
- FriendDiary
# - RecentComment
# - Message
- module: Filter::Rule
rule:
module: Fresh
mtime:
path: /home/<username>/plagger/.tmp/mixi
autoupdate: 1
- module: Publish::Gmail
rule:
- module: Rating
rate: '>= 0'
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
amazon.yaml:
Amazon アソシエイトレポートを Gmail で読む.
include:
- /home/<username>/plagger/.yaml/base.yaml
plugins:
- module: CustomFeed::AmazonAssociateReportJP
config:
email: XXX
password: base64::XXX
- module: Publish::Gmail
config:
mailto: [email protected]
mailfrom: [email protected]
mailroute:
# via: smtp_tls
# host: smtp.gmail.com:587
# username: [email protected]
# password: base64::XXX
via: smtp
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
pop3:
host: <domain>.sakura.ne.jp
username: XXX@<domain>.sakura.ne.jp
password: base64::XXX
…と,ひとまず.定番の使い方だけ.
あとは crontab -e して,
PERL5LIB=/home/<username>/local/lib/perl5:/home/<username>/local/lib/perl5/site_perl
0 * * * * /usr/bin/perl /home/<username>/local/bin/plagger -c /home/<username>/plagger/.yaml/bloglines.yaml > /dev/null 2>&1
30 5 * * * /usr/bin/perl /home/<username>/local/bin/plagger -c /home/<username>/plagger/.yaml/mixi.yaml > /dev/null 2>&1
30 6 * * * /usr/bin/perl /home/<username>/local/bin/plagger -c /home/<username>/plagger/.yaml/amazon.yaml > /dev/null 2>&1
とか適当に.
これからレンタルサーバーの無料お試し期間の2週間,遊び倒してみます.
非常にたくさんの情報を残してくれた先駆者の方々に感謝.