Category Archives: plagger

mixiとblogをそのまま同期させると、del.icio.usのdaily postがmixiでは役立たずになってウザそうだからどうにかする


mixiにそのまま投稿しちゃうと、本来リンクじゃないと困るものが、ただのテキストになってしまうわけで。どっちみち携帯から見てる人には無用なエントリになっちゃうし、いっそのことmixiには投稿しないようにしようと。一番てっとり早いのはP::P::MixiDiary.pm内で、単純にif文でほげほげすることなんだけど。ちょっと気が向いたのでplugin初挑戦してみた。

package Plagger::Plugin::Filter::StripDeliciousDailyPost;
use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'update.entry.fixup' => \&filter,
    );
}

sub filter {
    my($self, $context, $args) = @_;

    my $title = $args->{entry}->title;
    for my $entry ($args->{feed}->entries) {
        if ($entry->title =~ /^links for \d{4}-\d{2}-\d{2}$/i) {
            $context->log(info => "Delete Delicious daily post entry " . $entry->link);
            $args->{feed}->delete_entry($entry);
        }
    }
}

1;
__END__

やはりperlは書き慣れんな。yamlを以下のようにして動作確認。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://nobu666.com/rss?feed=rss2
  - module: Filter::Rule
    rule:
      module: Deduped
      path: /tmp/blog2mixi.tmp
      compare_body: 1
  - module: Filter::Reverse
  - module: Filter::FindEnclosures
  - module: Filter::FetchEnclosure
    config:
      dir: /tmp/fetch-image
  - module: Filter::FormatText
  - module: Filter::EntryFullText
  - module: Filter::StripDeliciousDailyPost
  - module: Publish::MixiDiary
    config:
      username: メールアドレス
      password: パスワード
      interval: 10
      originally_link: 1

mixiとblogの同期


前使ってたwp-mixipublisherは便利だったんだが、今のバージョンのWordPressじゃ動かないっぽ。色々修正してみたけど途中で面倒になったので、結局plaggerでやることに。PlaggerをつかってBlogとMixiの日記を同期させる参照。YAMLにFilter::FindEnclosures入れ忘れたので悲惨なことになってるな。ちゃんと動くんかな…なんか投稿は成功してるのに、エラーログ出る。謎。テストで画像貼るお!

猫鍋

Dedupeの指定間違ってたのかな…記事ダブりまくり。もっかいテスト。

[memo] GentooにPlaggerをインストール


Gentooにはg-cpanという素晴らしいものがあるのだが、そこはあえて使わずにいく。というかなんか知らないけど上手くいかなかったので、仕方なく手動で入れたとも言う。とりあえず自宅サーバと言うことで、サックリrootになって入れることにする。そのほうが簡単。以前レンタルサーバで悩んだのがウソのようだ。ちゃんとログを取ってないので曖昧な記憶でメモ。

準備

別段何もない。

perl -MCPAN -e shell

基本全部デフォルトのままENTER押してりゃよし。Gentooの場合、cpanでガンガン入れる前にまず

emerge expat

これをやっておく。次にCPANのConfigを弄る。

vi /usr/lib/perl5/5.8.8/CPAN/Config.pm
 $CPAN::Config = {
  'build_cache' => q[100],
  'build_dir' => q[/root/.cpan/build],
  'bzip2' => q[/bin/bzip2],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'colorize_output' => q[0],
  'commandnumber_in_prompt' => q[1],
  'cpan_home' => q[/root/.cpan],
  'curl' => q[/usr/bin/curl],
  'ftp' => q[/usr/bin/ftp],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[],
  'gzip' => q[/bin/gzip],
  'histfile' => q[/root/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/root/.cpan/sources],
  'lynx' => q[],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/usr/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'ncftp' => q[],
  'ncftpget' => q[],
  'no_proxy' => q[],
  'pager' => q[lv -Ou8 -c],
  'prefer_installer' => q[EUMM],
  'prerequisites_policy' => q[ask],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/zsh],
  'show_upload_date' => q[1],
  'tar' => q[/usr/bin/tar],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'test_report' => q[0],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [q[ftp://ftp.kddilabs.jp/CPAN/]],
  'wget' => q[/usr/bin/wget],
 };
 1;
 __END__

cpan -i Bundle::CPAN

CPANモジュールのインストール

Bundle::CPANとPlaggerに依存するモジュール(メモ)に従って進める。書いてあるとおり、TemplateとEncode::Detectはまともには入らないっぽいので諦めてforce installで。別段不都合はないので。

なんかRDF::Coreが上手く入らなくて困った記憶がある。emerge expatしてないせいだった、という記憶もあるが…ちょっと覚えてない。でもコマンドの履歴に以下のものが残っていた。

wget http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/modules/by-module/RDF/DPOKORNY/RDF-Core-0.50.tar.gz
tar -zxvf RDF-Core-0.50.tar.gz
cd RDF-Core-0.50
perl Makefile.PL
make

手動で入れたっぽい。若年アルツで覚えてない。まぁとりあえず頑張って入れて、cpanシェルでtest Plaggerが通るまで頑張る。通ったらinstall Plagger。

リポジトリから最新取得

subversionを使ってリポジトリから最新版を持ってきてmakeする。

svn co http://svn.bulknews.net/repos/plagger/trunk/plagger
cd plagger
perl Makefile.PL
make

ここまで行ったら出来たも同然。Plagger3大罠の1つである、assetsのコピーを忘れないうちにやっておく。svnで最新版を入れたディレクトリのassets以下に、 .cpan/build/Plagger-x.x.xx/assets/plugins/Publish-Gmail/gmail_notify.tt をコピっておく。yamlのglobalでassets_pathを指定するのも忘れずに。ちなみにyamlのサンプルは .cpan/build/Plagger-x.x.xx/examples 以下に入っているので、適当な場所にコピって編集すべし。

まぁ何が言いたいかって言うとレン鯖だと非常に苦労したインストールも、自宅鯖なら超簡単だぜってことです。gmailのメール送信量制限も、自宅鯖なら無関係。cacheもレン鯖だと、HDDが1Gくらいしかないので気にしなきゃいけないけど自宅鯖にはほぼ無関係。足りなくなったら増やせばイイだけだし。Plagger自体それなりに負荷があるので、レン鯖の場合は30分単位くらいで回さないと怒られそうなのだが、それを気にしなくていいのが一番でかい。もう5分とかで回してる。

自宅サーバ用のPCを購入したけど初期不良で動かず


土曜日に秋葉原で一式購入。とりあえずファイルサーバとして使いたいのと、個人用にSubversionとTrac、あとPlaggerをLivedoor ReaderをフロントエンドにするPlaggerLDR。で、そんなに性能は必要ないので、24時間部屋で動かしても電気代がたいしたことないことと、五月蠅くないことの方が大事なのだ。Plaggerはレンタルセーバで動かしてるけど、なにぶん共用サーバなので変な設定試して暴走させるのが嫌なので…できれば自宅サーバで動かしたいところ。

そんなわけで性能を犠牲にしてでも静音化して、なおかつ場所を取らないマシンを組むことにした。そんなわけで、キューブ型かつACアダプタ駆動というShuttle XPC SD11G5をチョイス。これならほぼファンレスでいける。多分HDDのアクセス音しかしないはずだ。CPUは安くて低電圧なCeleronM。上記のような使い方なら十分と踏んだ。

さくっと組んでみたがACアダプタの通電ランプがつかず、もちろん電源も入らない。組み上げたのが夜だったため、日曜日に買ったところに持って行ったら初期不良…土日でOSセットアップから最低限の設定まで終わらせたかったのに…。ついでなので、メインPCのメモリも買って増設しといた。いまどきXPを512MBで動かしてたんだけど、+2GBして2.5GBにしたら別マシンのように快適になった。すばらしい。

明日か明後日に配送されてくるはずだけど、未だにOS何入れるか迷い中。UbuntuかDebianかCentOSかFreeBSDかSolaris10か。gentooも興味あるけど、CPUパワーがないからコンパイル大変そうで却下。管理の楽さでいえばUbuntu/Debianっぽいけど、Solaris+ZFSっても惹かれる。でも仕事でRHEL使ってるから、慣れで言うとCentOSなのかもとか思ったり。でもでもFreeBSDの安定性も捨てがたいし…むぅぅぅ悩む…

otsuneさんのはてなダイアリーを購読してるとPlaggerがこける問題は修正されたっぽ


otsuneさんのはてなダイアリーを購読してるとPlaggerがこける件、http://plagger.org/trac/changeset/1672修正されていました。単にnullチェック漏れだったっぽい。

なんかPlagger動いてないと思ったら、otsuneさんのはてなダイアリーを購読してるとPlaggerがこけるっぽい


なんかgmailが寂しいと思ったので、LogLevelをdebugにして動かしてみたら以下のようになった。


Plagger::Plugin::Subscription::LivedoorReader [info] You have 614 unread item(s) on livedoor Reader.
Plagger [info] plugin Plagger::Plugin::Aggregator::Simple loaded.
Plagger::Plugin::Subscription::LivedoorReader [debug] Logging in to Livedoor Reader
Plagger::Plugin::Subscription::LivedoorReader [debug] get unread items of 1967834
Plagger::Plugin::Subscription::LivedoorReader [debug] get unread items of 2023794
The 'epoch' parameter (undef) to DateTime::from_epoch was an 'undef', which is not one of the allowed types: scalar
at /home/nobu666/perl/lib/site_perl/5.8.8/i386-freebsd/DateTime.pm line 430
DateTime::from_epoch('undef', 'epoch', 'undef', 'time_zone', 'local') called at /home/nobu666/perl/lib/site_perl/5.8.8/Plagger/Date.pm line 63
Plagger::Date::from_epoch('Plagger::Date', 'undef') called at /home/nobu666/perl/lib/site_perl/5.8.8/Plagger/Plugin/Subscription/LivedoorReader.pm line 97
Plagger::Plugin::Subscription::LivedoorReader::sync('Plagger::Plugin::Subscription::LivedoorReader=HASH(0x8a3d72c)', 'Plagger=HASH(0x87b4d44)', 'HASH(0x901eae0)') called at /home/nobu666/perl/lib/site_perl/5.8.8/Plagger/Plugin/Subscription/LivedoorReader.pm line 58
Plagger::Plugin::Subscription::LivedoorReader::__ANON__('Plagger=HASH(0x87b4d44)', 'HASH(0x901eae0)') called at /home/nobu666/perl/lib/site_perl/5.8.8/Plagger.pm line 328
Plagger::run('Plagger=HASH(0x87b4d44)') called at /home/nobu666/perl/lib/site_perl/5.8.8/Plagger.pm line 69
Plagger::bootstrap('Plagger', 'config', '/home/nobu666/plagger/ldr2gmail.yaml') called at /home/nobu666/perl/bin/plagger line 24

日付絡みで落ちているっぽい?2023794はsubscription_idっぽいので、LDRのAPIを http://reader.livedoor.com/api/all?subscribe_id=?2023794 こんな感じで叩いてみた。返ってきたJSON抜粋。


{"ads":[{"url":"http://www.gyao.jp/rss/","title":"完全無料パソコンテレビ「GyaO」","description":"番組情報をジャンル別にRSS配信。新着情報をチェックすれば見逃しも防げる!"},{"url":"http://blog.livedoor.com/cgm.html","title":"ライブドアのブログ・クチコミ","description":"ウィキ、ソーシャルブックマーク、SNS、写真共有、キーワードすべてあります!"}],"subscribe_id":"?2023794","channel":{"error_count":"0","link":"http://d.hatena.ne.jp/otsune/","description":"import otsune from Hatena","image":null,"title":"import otsune from Hatena","feedlink":"http://d.hatena.ne.jp/otsune/rss","subscribers_count":"178","expires":1156265399},"items":[{"enclosure":null,"link":"http://d.hatena.ne.jp/otsune/99990101/p1","enclosure_type":null,"author":"otsune","body":"","created_on":null,"modified_on":null,"id":"554908","title":"いそいで口で吸え","category":""},{"enclosure":null,"link":"http://d.hatena.ne.jp/otsune/20060821/AsyncMedia","enclosure_type":null,"author":"otsune","body":"\n\t\t<div>\n\t\t\t<p><a href=\"http://blogpal.seesaa.net/article/22560511.html\">FIFTH EDITION: メディア・ゲーム・ネットで進む非同期化</a></p>\n\t\t\t<blockquote>\n\t\t\t<p>すいません。ちょっと分かりにくいところが有るので質問します。</p>......

長いので途中で省略。「いそいで口で吸え」というエントリでcreated_onとmodified_onがnullなせいでしょうか。投稿日付が9999-01-01になってるのがそもそもの原因なの?よくわからない。Perlわかんねー…勉強せねば。

つーか「いそいで口で吸え」というと、「かんたまがきゆいのです」とか「やんこまりたい」とか「めんたまにきんそれーたむを塗ると、きつにじもちがいい」とか「ポール・マッカートニー取調室の菊池です」とか思い出しました。どうでもいいですね。