- 2009-01-16 (金) 13:25
- Perl

毎度おなじみ,Plaggerですが,今回はとりあえずできた程度のモジュール. TwitterのRSSを取得して,はてなダイアリーの見出しとして投稿してしまいます. こうすることで,はてダのキーワードと検索が使えるので何かと便利かも. 言及したキーワード一覧なんかは,自分がよくどんなことをしゃべってるのか 見ることができておもしろいと思います.というわけでできあがりのはてダは こちら.
Plagger::Plugin::Publish::Twitter2HatenaDiary
本当は,FilterとPublishに分離すべきものなのですが,デフォルトの Publish::HatenaDiaryだとテンプレート使ってるのでちょっと嫌な感じです. なので,テンプレート使わずにそのまま投稿するだけの Publish::HatenaDiarySimpleを作ればいいのですが,面倒だったので 一緒にFilterの役目もくっつけてしまいました.余力があればあとでちゃんと 分離したいと思います.
要点は,はてダへの投稿に関してはPublish::HatenaDiaryのマルパクリですが, どうやらtitleというものを見出しにしてくれるようなので,ここに以下の フォーマットでTwitterのポストを書き込みます.
[http://twitter.com/riywo/statuses/*********:title=12:32] てすとてすとー
これははてダ記法で,投稿時間にステータスへのリンクを貼ってくれます. ただ,問題だったのが投稿時間です.Twitterの設定でGMT+9:00を指定しているのに なぜか反映されていません.英語にしてるからかな?ともかくそれが 嫌なので,DateTimeモジュールなどを使いながら,ソースの中で無理矢理+9:00して しまっています.この辺も要変更ですが,自分用なのでまぁ動けばいいやw
あと,TwitterのRSSだと改行の含まれるポストがそのまま流れてくるので, 改行を消してやらないといけません.これは以前作ったFilter::TwitterQuoteでも 起こりうるので,そっちも修正しました.正規表現べんりー.
あとはいつも通りこれをcronで回してやれば終わり.やたー! ソースはいつも通りgithubに上げていますので,git使う人はそちらからどうぞ.
lib/Plagger/Plugin/Publish/Twitter2HatenaDiary.pm
use strict;
use base qw( Plagger::Plugin );
use Encode;
use WWW::HatenaDiary;
use DateTime;
use DateTime::Format::HTTP;
use DateTime::TimeZone;
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'plugin.init' => \&initialize,
'publish.init' => \&publish_init,
'publish.entry' => \&publish_entry,
'publish.finalize' => \&publish_finalize,
);
}
sub initialize {
my($self, $context) = @_;
my $config = {
username => $self->conf->{username},
password => $self->conf->{password},
group => $self->conf->{group},
mech_opt => {
agent => Plagger::UserAgent->new,
},
};
$self->{diary} = WWW::HatenaDiary->new($config);
}
sub publish_init {
my($self, $context, $args) = @_;
local $@;
eval { $self->{diary}->login };
if ($@) {
$context->log(error => $@);
delete $self->{diary};
}
}
sub publish_entry {
my($self, $context, $args) = @_;
return unless $self->{diary};
my $entry_title = $args->{entry}->title_text;
$entry_title =~ s/\r|\n//g;
$entry_title =~ s/^.+?: //o;
# $entry_title =~ /^(.+?): (.+)$/o;
my $post = $entry_title;
my $date = $args->{entry}->date;
my $zone = DateTime::TimeZone->new( name => 'GMT' );
my $dt = DateTime::Format::HTTP->parse_datetime($date, $zone);
$dt->set_time_zone('Asia/Tokyo');
my $hh = sprintf("%02d", $dt->hour);
my $mm = sprintf("%02d", $dt->minute);
my $time = $hh . ":" . $mm;
my $link = $args->{entry}->link;
my $title = "[" . $link . ":title=" . $time . "] " . $post;
$context->log(debug => "$title \n");
# my $body = $self->templatize('template.tt', $args);
my $uri = $self->{diary}->create({
title => encode_utf8( $title ),
# title => encode_utf8( $args->{entry}->title_text ),
# body => encode_utf8( $args->{entry}->body_text ),
});
$context->log(debug => "Post entry success: $uri");
my $sleeping_time = $self->conf->{interval} || 3;
$context->log(info => "sleep $sleeping_time.");
sleep( $sleeping_time );
}
sub publish_finalize {
my($self, $context, $args) = @_;
return unless $self->{diary};
$self->{diary}->{login}->logout;
}
1;
twitter2hateda.yaml
- /home/user/yaml/base.yaml
plugins:
- module: Subscription::Config
config:
feed:
- http://twitter.com/statuses/user_timeline/riywo.rss
- module: Filter::Reverse
- module: Filter::Rule
rule:
module: Deduped
path: /home/user/cache/plagger-twitter2hateda.db
- module: Publish::Twitter2HatenaDiary
config:
username: hatena-id
password: **********
ふと気づいたCustomFeed::Twitterの問題点
あと途中で一度CustomFeed::Twitterを入力につかおうと思ったのですが, Fav用に作っていたので,IDが取れていなかった部分を修正.しかし, WEBでの表示は実はポストを省略されたりしているので,ちょっとまずいですねー. この辺はCustomFeed::Twitterの中でポストのURLにアクセスして 全文取得しないといけません.EntryFullTextとか使ってもいいのかもしれません. 最近はTwitterも安定してるのでRSSでもいいんですけどねー.Filter::Ruleの 重複を調べるモジュールの挙動を調べないとSubscription::ConfigとCustomFeedが 共存できないな.この辺は要調査.
PerlもPlaggerもすげーよ!
いやー,それはともかく,Perl簡単だわー.例えば時刻取り扱いたいと思ったら 「cpan 時刻」とかで検索すればわさわさ出てくる.はてダのAPIもCPANがあるから 僕は何もしなくてもできる.便利すぎる.Plaggerも適当にいい感じでRSSを 処理してくれるので,勘でアクセスするとちゃんとデータ入ってたりするし.
PlaggerとCPANがある以上,Perl以外をバリバリやる気はしないなー.ただ Catalystはドキュメント不足な気がしたので,フレームワークならRuby on Railsかな. RoRとPerlを連携とかするのは,無駄なことかしらw?
- Newer: はてなブックマークのお気に入り機能はTwitter的に使える
- Older: Skitchを使ってスクリーンショットをBlogに載せる
Comments:0
Trackbacks:2
- Trackback URL for this entry
- http://blog.riywo.com/2009/01/16/132518/trackback
- Listed below are links to weblogs that reference
- TwitterのRSSからはてなダイアリーに投稿してしまうPla! from As a Futurist...
- pingback from Taraco-Sell’s Yesterday once more | Like a Merlion 09-04-30 (木) 6:14
-
[...] TwitterのRSSからはてなダイアリーに投稿してしまうPla! - As a Futurist… http://blog.riywo.com/2009/01/16/13251809:40:24 [Like a Merlion] Taraco-Sell’s Yesterday once more http://shortna.me/cfa0109:43:15 [...]
- trackback from ワインと将棋とインターネット 09-09-27 (日) 16:43
-
[IT] Twitter2HatenaDiary
TwitterのRSSからはてなダイアリーに投稿してしまうPla! - As a Futurist... こちらを参考に、、というか拝借してtwitterのtimelineをはてなダイアリーに投稿するPla環境を構築。 これ、前々からや...


