ただし、携帯からはdel.icio.usが使えない為、はてなブックマークを使ってお気に入りユーザのブクマから必要な物だけを自分のブックマークとしてエントリしています。その後、資料として必要な物をdel.icio.usに手作業で転送しています。ただし量が多い場合にはPlaggerを使うこともあります。
ただし、ここで一つ問題が発生していました。
はてなブックマークのフィードにはブクマコメントがitem/descriptionフィールドに格納されています。ただしPublish::Delicousを含むほぼ全てのSBM系プラグインではsummaryではなくbody(body_text)をコメント部として扱う仕様になっています。ですので
http://b.hatena.ne.jp/mattn/rss
<description>おぉ。thx>miyagawa</description>
とdescriptionフィールドに格納されている文字列そのままが欲しいにも関わらず
<content:encoded>
<blockquote cite="http://www.ac.cyberhome.ne.jp/~mattn/cgi-bin/blosxom.cgi/software/lang/perl/20071015162834.htm" title="Big Sky :: Publish::Wassrをでっちあげた">
<cite><a href="http://mattn.kaoriya.net/software/lang/perl/20071015162834.htm">Big Sky :: Publish::Wassrをでっちあげた</a> <a href="http://b.hatena.ne.jp/entry/http://www.ac.cyberhome.ne.jp/~mattn/cgi-bin/blosxom.cgi/software/lang/perl/20071015162834.htm"><img src="http://b.hatena.ne.jp/images/entry.gif" title="このエントリーを含むブックマーク" alt="このエントリーを含むブックマーク" border="0"></a></cite>
</blockquote>
<p>おぉ。thx>miyagawa</p>
</content:encoded>
という元記事の引用文が含まれたbodyで配信されてしまいます。はじめはPublish::XXXでpost_bodyしているSBM系のプラグインを全て直そうかと(use_summaryみたいなオプションで)思いましたが面倒。いっそAggregator::SimpleのXML::Feed::RSSを操作している部分にオプション付けて強制的にcontentでなくsummaryを使わせるように修正しようかとも思いました。ただ、よく考えたらsummaryをbodyに上書きしてやるプラグインを書いた方が便利だし汎用的だと思い以下のプラグインを作りました。Plagger/Plugin/Filter/SummaryToBody.pm
package Plagger::Plugin::Filter::SummaryToBody;
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) = @_;
$args->{entry}->body($args->{entry}->summary);
}
1;
__END__
=head1 NAME
Plagger::Plugin::Filter::SummaryToBody - copy summary field to body field.
=head1 SYNOPSIS
- module: Filter::SummaryToBody
=head1 DESCRIPTION
This plugin copy summary field to body field. This is helpful to sanitize
description field. ex) Hatena bookmark field include <blockquote> tag for
quote.
=head1 AUTHOR
Yasuhiro Matsumoto
=head1 SEE ALSO
L<Plagger>, L<Plagger::Plugin::Filter::SummaryToBody>
=cut
使い方はmodule定義だけ。以下は私がはてブからdel.icio.usの転送につかっているYAMLhatebu2delicous.yaml
global:
assets_path: /home/user/plagger/assets/
timezone: Asia/Tokyo
log:
level: info
plugins:
- module: Subscription::Config
config:
feed:
- http://b.hatena.ne.jp/[hatena user]/rss
- module: Filter::SummaryToBody
- module: Filter::Rule
rule:
module: Deduped
path: /tmp/hatebu2delicious.db
- module: Publish::Delicious
config:
username: [delicious username]
password: [delicious password]
interval: 2
post_body: 1
どっちかっていうとBreakXXX系のプラグインで、しかも個人用途でしかありませんが一応公開しておきます。後でCodeReposにも置いておきます。
追記
もしかしたら空繰再繰さんの「Plagger::Plugin::Filter::ExtractBody」を使ってXPathで「p」とする事でも同じ結果になるかもしれませんね。
こちらは後日試します。