Plagger::Plugin::Filter:GoogleBookmarksFeed というのを書きました。でもまだ完成してません。日本語が消えてしまいます。誰か助けてー。
package Plagger::Plugin::Filter::GoogleBookmarksFeed;
use strict;
use base qw( Plagger::Plugin );
use Plagger::Tag;
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'aggregator.entry.fixup' => \&fixup,
);
}
sub fixup {
my($self, $context, $args) = @_;
my $ns = 'http://www.google.com/searchhistory';
if ($args->{orig_entry}->isa('XML::Feed::Entry::RSS')) {
if (my $orig_body = $args->{orig_entry}->{entry}->{$ns}->{bkmk_annotation}) {
$args->{entry}->body($orig_body);
$context->log(info => "Parsing Google Bookmarks title " . $args->{entry}->permalink);
}
if (my @orig_tags = @{$args->{orig_entry}->{entry}->{$ns}->{bkmk_label}}) {
$args->{entry}->tags(@orig_tags);
}
}
}
1;
__END__
PlaggerのPluginを書いたのは初めてです。ていうかPerl自体かなり久しぶりで、よくわからないまま見よう見まねで書いただけです。基礎的なことすらわかってないと思います。
ちょっと事情があって、https経由でしかインターネットに向けて発信したくない場所(通信が監視されている場所)からlivedoorクリップに投稿したい。残念ながらlivedoorクリップはhttpsに対応してないため、そのまま投稿することはできません。
そこで考えたのが、「httpsでGoogleブックマークに投稿して、別な場所からPlaggerがそのGoogleブックマークの内容をlivedoorクリップに投稿する」という方法。Googleブックマークはhttpsでも通信できるので、なんか可能そうな気がします。
そこで、以下のようなconfig.yamlを書きました。
plugins:
- module: Subscription::Config
config:
feed:
- url: https://www.google.com/bookmarks/?output=rss
- module: UserAgent::AuthenRequest
config:
host: www.google.com:443
auth: basic
realm: Google Search History
username: (Googleのアカウント名)
password: (Googleのパスワード)
- module: Publish::LivedoorClip
config:
livedoor_id: (livedoor ID)
password: (livedoor IDのパスワード)
interval: 2
post_body: 1
Googleブックマークのフィードを取得して(Basic認証)、それをPublish::LivedoorClipしてるだけです。これで一応投稿できたのですが、
という状況でした。うーん残念。
Googleブックマークのフィードを見てみると、
<item>
<title>ページのタイトル</title>
<link>http://www.example.com</link>
<pubDate>Wed, 18 Jul 2007 12:34:56 GMT</pubDate>
<category>bookmark result</category>
<description></description>
<guid>なんかユニークっぽいID</guid>
<smh:bkmk>yes</smh:bkmk>
<smh:bkmk_id>ここもユニークっぽいID</smh:bkmk_id>
<smh:bkmk_title>ページのタイトル</smh:bkmk_title>
<smh:bkmk_label>タグ1</smh:bkmk_label>
<smh:bkmk_label>タグ2</smh:bkmk_label>
<smh:bkmk_annotation>コメント</smh:bkmk_annotation>
</item>
こんな感じになってます。
descriptionは空っぽだし、categoryは「bookmark result」。これがlivedoorクリップに投稿されてしまったっぽい。正しくはsmh:bkmk_annotationとsmh:bkmk_labelが使われればいいんだと思います。
そこで、上記に書いたPluginを書いてみました。Filterにして、smh:bkmk_annotationをbodyに、smh:bkmk_labelをtagsにセットするような感じです。GoogleBookmarksFeed.pmというファイル名にして、perl/site/plagger/Plugin/Filterに配置します。
そしてこれを使うconfig.yamlは以下。
plugins:
- module: Subscription::Config
config:
feed:
- url: https://www.google.com/bookmarks/?output=rss
- module: UserAgent::AuthenRequest
config:
host: www.google.com:443
auth: basic
realm: Google Search History
username: (Googleのアカウント名)
password: (Googleのパスワード)
- module: Filter::GoogleBookmarksFeed
- module: Publish::LivedoorClip
config:
livedoor_id: (livedoorのアカウント名)
password: (livedoorのパスワード)
interval: 2
post_body: 1
さっきのやつに「Filter::GoogleBookmarksFeed」の定義を追加しただけです。これで試してみると、うまく行ってるように見えました。やったー。
喜んだのもつかの間、日本語の文字を含むタグやコメントを書くと、その文字が消えてしまうようです。Plaggerではありがちな問題なような気がしますが、このPluginでも起きてしまいました。
これがどうやっても解決できない。いや「どうやっても」っていうか、勉強不足なのでいろいろ試すネタがないんです。
うあー困った。