昨日からの続き。
本来の目的「livedoor blogからmixi日記にplaggerから投稿する」構築について。
もと記事はこちら
config.yamlはこんな感じ
「いまPla」http://d.hatena.ne.jp/toshi123/20060911#p1で流し読みをして、概要の把握。もっと具体的に知りたくてhttp://d.hatena.ne.jp/jun-yoshida/20060927/1159312752からhttp://wiki.shibuya.pl/のリンク集をみつけた。そこでhttp://plagger.org/trac/wiki/PlaggerQuickStartを発見。yamlはどこにあってもOKな様子。plagger -cで、どこにyamlがあっても実行できる。このおかげで、実行するyamlはc:\perl\bin\config.yamlに書かなくてもOKということで安心。
とりあえず、c:\perl\bin\config.yamlを早速設置してc:\> Plaggerと実行すると、うおっ、エラーだ。
しかし、ここから地獄のロスタイムが始まった。というのも、上記設定してから実行させると、次のようなエラーが出てしまうのだ。
そこで、念為でppm upgradeなどをしてみる。すると
しかしやはりこの原因はSAXのせいではないのか・・・。がっかし。
仕方がないので「a namespace prefix should look like [a-z_][a-z0-9.\-_]*」の文字列でgrepして、XML::RSS::LibXML.pmのsub add_moduleに存在と見つける。このsub_add_moduleは三度呼ばれていて、$args{prefix}の値は一度目はcontent二度目はdctermsであった。なぜ?引っかかるところでないのに・・・。
ここでソースハックはあきらめる。まずは自己の基礎能力の底上げが必要だと認識(笑)。
と言うわけでいまplaでサンプルを試す。出てくるサイト片っ端から、Subscription::Configのfeedに食べさせて試してみる。うぅむ、もしかしてRSSのRDFファイルとかに対応していないのか!そんな馬鹿な!!。と思って、ならばきっと数々のblogではまっている人たちがいるはずだ!! そのうちlivedoorのランキングから取得しているサンプルを見つけた。livedoorから取得している人を・・・とさがしていたら・・・あ!feedはatom.xmlで指定するのか?
なんとこれですんなりいけました。orz. . え、こんなオチ?ちょっと・・・はずかしい。
ということでした。ちゃんちゃん。初めのスクリプトに戻って幾つか修正させてもらい完成。無事に動作し増しました。結局ほとんど参考にしてもらって次のスクリプトで完了。
[config.yaml]
何回か試すうちに、更新されなくなっていたので、下記を付けたり消したりしながら設定。
なんだかんだで半日まるまる費やしてしまいました。勉強になったけどね!!
今日は体調不良で自宅で伏せってPCしていました。甲斐あり成功して嬉しい。
本来の目的「livedoor blogからmixi日記にplaggerから投稿する」構築について。
もと記事はこちら
●plus ultra blog「mixi日記にplaggerから投稿する」を参考に。でもって、ここのyamlにこちら@ITのページの初期設定を付け加えた。
http://ultra.boy.jp/?p=858
ここの元記事はこちら
●Piece of a Puzzle
http://xcezx.net/blog/development/plagger-plugin-publish-mixidiary-2.html
config.yamlはこんな感じ
こんなかんじ。そして、ここではじめてplaggerを動作させてみると、c:\perl\binにconfig.yamlを配置することを知る(笑)。超初心者なワタシ。さすがに無知さにおののいて
global:
plugin_path:
- C:\Perl\site\lib\Plagger\Plugin
assets_path: C:\Perl\site\lib\Plagger\assets
timezone: Asia/Tokyo
cache:
base: c:\
log:
level: info
plugins:
- module: Subscription::Config
config:
feed:
- url: http://blog.livedoor.jp/shimay/
- module: Filter::FindEnclosures
- module: Filter::FetchEnclosure
config:
dir: c:\hogehoge
- module: Publish::MixiDiary
config:
username: email@example.com
password: p4ssw0rd
「いまPla」http://d.hatena.ne.jp/toshi123/20060911#p1で流し読みをして、概要の把握。もっと具体的に知りたくてhttp://d.hatena.ne.jp/jun-yoshida/20060927/1159312752からhttp://wiki.shibuya.pl/のリンク集をみつけた。そこでhttp://plagger.org/trac/wiki/PlaggerQuickStartを発見。yamlはどこにあってもOKな様子。plagger -c
とりあえず、c:\perl\bin\config.yamlを早速設置してc:\> Plaggerと実行すると、うおっ、エラーだ。
Plagger::Plugin::Filter::FindEnclosures [fatal] C:\Perl\bin\assets\plugins\Filtr-FindEnclosures: No such file or directory at line 36ありゃ?とりあえず既出のconfig.yamlの最後に改行を入れてみる。これで上は通ったが
Can't locate Plagger/Plugin/Publish/MixiDiary.pm in @INC (@INC contains: C:\Perl\bin\lib C:/Perl/lib C:/Perl/site/lib .) at C:/Perl/site/lib/Plagger.pm line 232.でひっかかる・・・そりゃそーだ。Webに掲載されていたソースはMixiDiary.pmと言う名前で保管して「C:\Perl\site\lib\Plagger\Plugin\Publish」ここにいれるのね。なーんて。(単純な入れ忘れ、保存しなきゃ動くはずない)
しかし、ここから地獄のロスタイムが始まった。というのも、上記設定してから実行させると、次のようなエラーが出てしまうのだ。
Plagger::Plugin::Aggregator::Simple [error] Parser http://blog.livedoor.jp/shimay/ failed: Parsing content failed: a namespace prefix should look like [a-z_][a-z0-9.\-_]* at C:/Perl/site/lib/XML/RSS/LibXML/ImplBase.pm line 147むむ。LibXMLあたりのバージョンが悪いかと思った。まずは、config.yamlのmoduleを
at C:/Perl/site/lib/Plagger/Plugin/Aggregator/Simple.pm line 77
だけにして色々とトライしてみる。(Feed/Filter/Publish余計な影響を切り分けるため)
plugins:
- module: Subscription::Config
config:
feed:
- http://blog.livedoor.jp/shimay/
そこで、念為でppm upgradeなどをしてみる。すると
could not find ParserDetails.ini in C:/Perl/site/lib/XML/SAXと言うメッセージが出ていた。もしかするとこれが原因か?とちょっと嬉しくなって、http://zerosp.com/mt/archives/xml-sax-error.phpあたりに現象らしきモノがあったので
install http://ppm.tcool.org/archives/XML-SAX.ppdをしてみた。しかしnot foundだったので
install http://ppm.tcool.org/archives/XML-SAXとする。しかしarleady installedとのこと。そりゃそーか。念為で、再度upgradeを実施すると、ParserDetails.iniのエラーは出てこなかった。謎だが結果オーライ。
しかしやはりこの原因はSAXのせいではないのか・・・。がっかし。
Parsing content failed: a namespace prefix should look like[a-z_][a-z0-9.\-_]* at C:/Perl/site/lib/XML/RSS/LibXML/ImplBase.pm line 147 at C:\Perl\site\lib\Plagger\Plugin\Aggregator/Simple.pm line 77もう仕方がないので「Simple.pm line 77」を直接見て、その先に「XML::Feed->parse($content_ref)」を発見。しかしこの先は発見できず。仕方がないのでImplBase.pmを見る。sub parse_namespacesあたりだそうだが、片鱗も確認できない。
仕方がないので「a namespace prefix should look like [a-z_][a-z0-9.\-_]*」の文字列でgrepして、XML::RSS::LibXML.pmのsub add_moduleに存在と見つける。このsub_add_moduleは三度呼ばれていて、$args{prefix}の値は一度目はcontent二度目はdctermsであった。なぜ?引っかかるところでないのに・・・。
ここでソースハックはあきらめる。まずは自己の基礎能力の底上げが必要だと認識(笑)。
と言うわけでいまplaでサンプルを試す。出てくるサイト片っ端から、Subscription::Configのfeedに食べさせて試してみる。うぅむ、もしかしてRSSのRDFファイルとかに対応していないのか!そんな馬鹿な!!。と思って、ならばきっと数々のblogではまっている人たちがいるはずだ!! そのうちlivedoorのランキングから取得しているサンプルを見つけた。livedoorから取得している人を・・・とさがしていたら・・・あ!feedはatom.xmlで指定するのか?
http://blog.livedoor.jp/shimay/atom.xml
なんとこれですんなりいけました。orz. . え、こんなオチ?ちょっと・・・はずかしい。
【教訓】livedoor blogからPlaggerにfeedする際のsubscription::configのurlには「index.rdf」ではなくて「atom.xml」を指定する
ということでした。ちゃんちゃん。初めのスクリプトに戻って幾つか修正させてもらい完成。無事に動作し増しました。結局ほとんど参考にしてもらって次のスクリプトで完了。
[config.yaml]
それと、MixiDiary.pm元記事から「\」が消えていたところがあったので補って次のように書き換えた。
global:
assets_path: C:\Perl\site\lib\Plagger\assets
timezone: Asia/Tokyo
cache:
base: c:\tmp\
log:
level: debug
plugins:
- module: Subscription::Config
config:
feed:
- http://blog.livedoor.jp/shimay/atom.xml
- module: Filter::Rule
rule:
module: Deduped
- module: Filter::EntryFullText
- module: Filter::FindEnclosures
- module: Filter::FetchEnclosure
config:
dir: c:\tmp\image
- module: Publish::MixiDiary
config:
username: em@il.com
password: p4ssw0rd
以上で完成。debugにしているのでメッセージは大量に出るけど、これは後ほどinfoにする予定。
my $memo = "-------------------------------\n originally posted on blog\n";
$body = $body."\n\n".$memo.$linkurl; # $body plus quotation
my @images;
何回か試すうちに、更新されなくなっていたので、下記を付けたり消したりしながら設定。
- module: Filter::Rule完了しました。ちゃんとmixiに登録されています。あとは数日テストして問題なければ本格導入の予定。
rule:
module: Deduped
なんだかんだで半日まるまる費やしてしまいました。勉強になったけどね!!
今日は体調不良で自宅で伏せってPCしていました。甲斐あり成功して嬉しい。

見た感じ同じconfigになってるみたいだけど。僕もほぼパクttんで(^^;
intervalぐらいかな。
http://01world.blog8.fc2.com/blog-entry-294.html