2008/09/10
Plaggerでギャル語にフィルタするプラグインFilter::Galを書いた
Lingua::JA::Galを使ってフィードテキストをギャル語に変換します。
注意する点はHTMLなフィードをプレーンテキストに置き換えてしまう点です。
これでPublish::MixiDiary使ってギャルなマイミク装ってみませんか。
コードはこの辺に。
Lingua::JA::Gal++
Tagged as: gal, plagger
Bookmarks:
2008/07/30
Publish::MixiDiary書いた
mixi for iPhoneから発掘されたmixi日記投稿用API « kuって事でさっそくPlagger用にPublish::MixiDiary書いてみました。出来立てほやほやなので、あまりテストしていません。codereposに上げているので、良かったらテストしてみて下さい。
iPhoneからぜんぜん日記を書く手段がなかったらmixiから、mixi for iPhoneという日記を書いたりするiPhoneアプリが公開されました!
新しいアプリに新しいAPI、日記が投稿できるアプリなら日記投稿用のAPIというわけでmixiのあしあとAPI発掘と同じように掘り起こして見つけました。
ほかのAPIと同様、認証はWSSEでatomPubで日記を書くことができるようになっていました。エンドポイントはhttp://mixi.jp/atom/diary/member_id=mixiIDです。
http://ido.nu/kuma/2008/07/30/digging-mixi-for-iphone-application-and-new-api-for-posting-a-diary-with-a-photo/
これでtwitterの様にmixiを使って、マイミク外される事うけあいですね。
Publish::MixiDiaryちなみに中ではたけまるさんのAtompubを使っています。
Tagged as: mixi, perl, plagger
Bookmarks:
2008/03/26
Publish::Diigo書いた。
/lang/perl/plagger/lib/Plagger/Plugin/Publish/Diigo.pm - CodeRepos::Share - Tracwww.diigo.com...ブックマークレットから実行出来る専用ポスト画面がなかなかカッコイイ。
今回はこのブックマークレットのhackで作った。
これで、私が同期しているソーシャルブックマークは
- Publish::Delicious
- Publish::LivedoorClip
- Publish::Buzzurl
- Publish::LivedoorCilp
- Publish::Buzzurl
- Publish::GooBookmark
- Publish::NiftyClip
- Publish::Pookmark
- Publish::YahooBookmark
- Publish::FC2Bookmark
- Publish::BlueDot という名の Pubilsh::Delicious
- Publish::Magnolia という名の Publish::Delicious
- Publish::Diigo
以下、今後変わっていくかもしれないけどコード。
Tagged as: plagger
Bookmarks:
2008/01/18
Publish::HatenaHaiku書いた
コードはこんな感じ
package Plagger::Plugin::Publish::HatenaHaiku;
use strict;
use base qw( Plagger::Plugin );
use Encode;
use Time::HiRes qw(sleep);
use URI;
use Plagger::Mechanize;
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'publish.entry' => \&add_entry,
'publish.init' => \&initialize,
);
}
sub initialize {
my $self = shift;
unless ($self->{mech}) {
my $mech = Plagger::Mechanize->new;
$mech->agent_alias('Windows IE 6');
$mech->quiet(1);
$self->{mech} = $mech;
}
$self->login_hatena_haiku;
}
sub add_entry {
my ($self, $context, $args) = @_;
unless ($self->conf->{default_keyword}) {
Plagger->context->log(error => 'set default_keyword.');
}
my $summary = encode('utf-8', $args->{entry}->title)
. "\n" . encode('utf-8', $args->{entry}->link);
my $keyword = $self->conf->{default_keyword};
my $keyword_behaviour = $self->conf->{keyword_behaviour};
if ('default' ne $keyword_behaviour) {
if ('tag' eq $keyword_behaviour) {
my @tags = @{$args->{entry}->tags};
$keyword = $tags[0] if ($tags[0]);
}
if ('title' eq $keyword_behaviour) {
if ($summary =~ /^\[([^\]]+)\]/) {
$keyword = $1;
}
}
}
my $res = eval { $self->{mech}->get('http://h.hatena.ne.jp/') };
if ($res && $res->is_success) {
eval {
$self->{mech}->submit_form(
form_number => 1,
fields => {
word => encode('utf-8', $keyword),
body => $summary,
},
)
};
if ($@) {
$context->log(info => "can't submit: " . $@);
} else {
$context->log(info => "Post entry success.");
}
} else {
$context->log(error => "fail to post HTTP Status: " . $res->code);
}
my $sleeping_time = $self->conf->{interval} || 3;
$context->log(info => "sleep $sleeping_time.");
sleep( $sleeping_time );
}
sub login_hatena_haiku {
my $self = shift;
unless ($self->conf->{username} && $self->conf->{password}) {
Plagger->context->log(error => 'set your username and password before login.');
}
my $res = $self->{mech}->get('https://www.hatena.ne.jp/login?location=http://h.hatena.ne.jp/');
$self->{mech}->submit_form(
form_number => 1,
fields => {
name => $self->conf->{username},
password => $self->conf->{password},
},
);
if ($self->{mech}->content !~ 'http-equiv="Refresh"') {
Plagger->context->log(error => "failed to login to hatena haiku.");
}
}
1;
__END__
=head1 NAME
Plagger::Plugin::Publish::HatenaHaiku - Post to hatena haiku automatically
=head1 SYNOPSIS
- module: Publish::HatenaHaiku
config:
username: your-username
password: your-password
default_keyword: id:mattn
#keyword_behaviour: title
#keyword_behaviour: tag
#interval: 2
=head1 DESCRIPTION
This plugin automatically posts feed updates to hatena haiku
L<http://h.hatena.ne.jp/>. It supports automatic tagging(keyword) as well.
It might be handy for synchronizing your blog feeds into hatena haiku.
=head1 CONFIG
=over 4
=item username, password
username and password for Hatena Haiku. Required.
=item default_keyword
default keyword string. Required.
=item keyword_behaviour
Optional. if set 'title', it should accept 'plagger' in '[plagger]title'.
if set 'tag', it should accept a first of tags in feed.
=item interval
Optional.
=item timeout
Optional.
=back
=head1 AUTHOR
Yasuhiro Matsumoto
=head1 SEE ALSO
L<Plagger>, L<Plagger::Mechanize>
=cut
default_keywordは必須項目として、keyword_behaviourでキーワードの動作が変えられます。
keyword_behaviourに何も設定しなければ(もしくは'default')、default_keywordが使われ、'title'を設定すれば"[書評]ほにゃらら"の"書評"がキーワードに、'tag'を設定すればフィードタグの先頭を使う様になっています。
ただ、やっぱりフィードの転載なのではてなハイクのトップページに掲載する/掲載しないのオプションが欲しいなぁ...=>はてな事務局さん
なお、コードはCodeReposに置いてあります。
lang/perl/plagger/lib/Plagger/Plugin/Publish/HatenaHaiku.pm
ところで、dankogai氏もそれっぽい事(書評とか)やってるように見えるんだけど、もしかして手動だろうか?
Tagged as: plagger, はてなハイク
Bookmarks:
2007/11/09
YouTubeの動画をPlaggerで取得して携帯向け3GPに変換しSDカードに転送する方法
Plaggerでニコニコ動画を一括ダウンロード&変換 Podcast を生成して iPod touch で見る - 2007年11月最新版うちでは臨時予算案は可決されそうにありません。宝くじが当たるま携帯で我慢したいと思います。
今日は、ゆーすけべさんの所に置いてあるYAMLをちょこっと弄って、携帯向け変換をやろうかと思います。ちょっとだけオリジナリティを出そうとニコニコではなく、YouTubeから...
まず、こんなYAMLを用意します。
youtube_hatena_tagged.yaml
global:はてなで「youtube」タグが付いているフィードを取ってきて、Enclosureをフェッチ&解析。最後にFFmpegで変換というフェーズになります。Feed作成は意味なさそうですが、この後役に立ちます。
assets_path: /home/user/plagger/assets/
timezone: Asia/Tokyo
log:
evel: info
plugins:
- module: Subscription::Config
config:
feed:
- url: http://b.hatena.ne.jp/t/youtube?mode=rss&sort=hot&threshold=3
- module: Filter::FindEnclosures
- module: Filter::FetchEnclosure
config:
dir: /home/user/plagger/out
- module: Filter::FLVInfo
- module: Filter::FFmpeg
config:
command: /usr/bin/ffmpeg
ext: 3gp
dir: /home/user/plagger/out
encoding: utf-8
options:
video_codec: mpeg4
audio_codec: libamr_nb
audio_sampling_rate: 8000
audio_bit_rate: 12.2k
frame_size: 176x144
extra_options: -ac 1 -f 3gp
- module: Publish::Feed
config:
format: RSS
dir: /home/user/plagger/out
filename: youtube_hatena_tagged.xml
私の携帯SB810T向けには、映像コーデックにmpeg4、音声コーデックにamr-nb(libamr_nb)を指定します。メーカーの仕様によると、AACでも行けそうな事が書いてありますが、どうやら動画でない音声ファイルの場合のみAACが再生出来るようです。
また、サンプルレート8000はamr-nbの標準値で、オーディオチャネル(ac)は1にしないといけない様です。 もちろん
- lib/Plagger/Plugin/Filter/FFmpeg.pm
- lib/Plagger/Plugin/Filter/FLVInfo.pm
殆んどyusukebeさん(yousukebeさんではありません。ここ大事)のと同じです。大概はffmpegのオプションでなんとか出来るかと思います。ただ現状Plaggerのtrunkに入ってるFind-Enclosuresのyoutube.plでは、jp.youtube.comドメインのリソースが対象外になっていますので、以下のパッチを当てます。
Index: assets/plugins/Filter-FindEnclosures/youtube.pl※パッチが当たった物はCodeReposに入れてあります。チンして食べてください。ただGData APIでないのでカッコよくはありませんが。
===================================================================
--- assets/plugins/Filter-FindEnclosures/youtube.pl (revision 1988)
+++ assets/plugins/Filter-FindEnclosures/youtube.pl (working copy)
@@ -3,7 +3,7 @@
sub handle {
my ($self, $url) = @_;
- $url =~ qr!http://(?:www.)?youtube.com/(?:watch(?:\.php)?)?\?v=.+!;
+ $url =~ qr!http://(?:www.|jp.)?youtube.com/(?:watch(?:\.php)?)?\?v=.+!;
}
sub find {
あとは
# plagger -c youtube_hatena_tagged.yamlを実行すると、上のYAMLで指定している「out」フォルダにゴッチョリと3gpファイルが出来上がっている筈です。
携帯の場合はPodcast出来ませんし、動画のサイズが大きくなるとメールで送ったりHTTPでダウンロードする事も出来ません。結局はメモリ転送になりますが、Feed.pmにちょっとだけ手を加えて...
Index: lib/Plagger/Plugin/Publish/Feed.pmこんなパッチを当てると、フィード出力時に「command_after」が実行されますので
===================================================================
--- lib/Plagger/Plugin/Publish/Feed.pm (revision 1988)
+++ lib/Plagger/Plugin/Publish/Feed.pm (working copy)
@@ -122,6 +122,15 @@
open my $output, ">:utf8", $filepath or $context->error("$filepath: $!");
print $output $xml;
close $output;
+
+ if ($self->conf->{command_after}) {
+ my $command = $self->conf->{command_after};
+ my $dir = $self->conf->{dir};
+ $filepath =~ s!\\!/!g;
+ $command =~ s!\$\(filename\)!$filepath!g;
+ $command =~ s!\$\(dir\)!$dir!g;
+ system($command);
+ }
}
sub make_author {
- module: Publish::FeedこんなYAMLにしておけば、出来上がった3GPがUSB越しに携帯のmicroSDカードにズコーーーーンと転送されるって仕組です。
config:
format: RSS
dir: /home/user/plagger/out
filename: youtube_hatena_tagged.xml
command_after: find $(dir) -name "*.3gp" -exec cp \{\} /media/usbdisk/private/myfolder/My Items/Video
まぁ、Podcastと違って出来上がるまで、良い子ちゃんで待ってなきゃいけないですが...
ズゴーーーーン
追記
plagger流儀で言えば、Notify::Commandを使うべきですね。
Tagged as: ffmpeg, perl, plagger, youtube
Bookmarks:
2007/10/24
Publish::Magnolia書いた
/lang/perl/plagger/lib/Plagger/Plugin/Publish/Magnolia.pm - CodeRepos::Share - TracMa.gnolia.com...意外とUIが好き。
これで、私が同期しているソーシャルブックマークは
- Publish::Delicious
- Publish::LivedoorClip
- Publish::Buzzurl
- Publish::LivedoorCilp
- Publish::Buzzurl
- Publish::GooBookmark
- Publish::NiftyClip
- Publish::Pookmark
- Publish::YahooBookmark
- Publish::BlueDot という名の Pubilsh::Delicious
- Publish::Magnolia
収拾がつかなくなってきた。
追記
otsuneさんの解の方がよい。
CodeRepsに上げてあるMagnolia.pmは、plaggerのsvn/trunkが変わったタイミングで消します。
Tagged as: perl, plagger
Bookmarks:
2007/10/23
Publish::BlueDot書いた...と言いたかったが
ちゃんと調べるべきだなぁ...
ただ、Publish::Delciousではendpoint書き換えられないからパッチ書いた。
Index: lib/Plagger/Plugin/Publish/Delicious.pmYAMLには
===================================================================
--- lib/Plagger/Plugin/Publish/Delicious.pm (revision 1981)
+++ lib/Plagger/Plugin/Publish/Delicious.pm (working copy)
@@ -18,10 +18,14 @@
sub initialize {
my ($self, $context, $args) = @_;
- $self->{delicious} = Net::Delicious->new({
+ my $opt = {
user => $self->conf->{username},
pswd => $self->conf->{password},
- });
+ };
+ for my $key (qw/ endpoint/) {
+ $opt->{$key} = $self->conf->{$key} if $self->conf->{$key};
+ }
+ $self->{delicious} = Net::Delicious->new($opt);
}
sub add_entry {
- module: Publish::Deliciousと書くと行ける!
config:
username: del.icio.us-username
password: del.icio.us-password
interval: 2
post_body: 1
endpoint: https://secure.bluedot.us/v1/
これで、私が同期しているソーシャルブックマークは
- Publish::Delicious
- Publish::LivedoorClip
- Publish::Buzzurl
- Publish::LivedoorCilp
- Publish::Buzzurl
- Publish::GooBookmark
- Publish::NiftyClip
- Publish::Pookmark
- Publish::YahooBookmark
- Publish::BlueDot という名の Pubilsh::Delicious
収拾がつかなくなってきた。
Tagged as: perl, plagger
Bookmarks:



