「twitter2amebaなう」を作ってみた
2009年12月11日 / Perl
このところカンファレンスや展示会ばかりに遊びに勉強しにいって、あまりコードを書かない人だと思われているhiroyukiです(泣)。---
そんなイメージを払拭すべく(?)、「twitter2amebanow」を書いてみました。
【何ができるの?】
【設置方法は?】
- サーバやOSを準備する
- 適当にディレクトリを作って、「twitter2amebanow.pl」と、空の「twitter2amebanow.dat」ファイルを配置
- Net::TwitterやWeb::Mechanizeなどのモジュールを、cpanからインストール
- コンフィグの$twuser、$amuser、$ampassを設定
- cronを設定
スクリプトは以下の通り。 「ameba なう」には今のところAPIがないので、WWW::Mechanize で無理やりPOSTしています。また、短時間での連続投稿にも対応したのですが、どうもAmebaなうの方で弾いてしまうようので、最新の一件だけ転送するようにしました(コンフィグの$countで調整可)。
改変、配布はご自由に(ただし自己責任ね)。
twitter2amebanow.pl
#! /usr/local/bin/perl -w
use strict;
use warnings;
use YAML::Tiny;
use FindBin;
use WWW::Mechanize;
use Encode;
######################################
# コンフィグ
######################################
# アカウント
my $twuser = ""; # twitterのユーザ名
my $amuser = ""; # amebaのユーザ名
my $ampass = ""; # amebaのパスワード
# status_id管理ファイル
my $datfile = "$FindBin::Bin/twitter2amebanow.dat";
# 連続投稿数
my $count = 1;
######################################
# メイン
######################################
# 前回のstatus_idの取得
my $yaml = YAML::Tiny::LoadFile($datfile);
my $since_id = $yaml->{since_id} || 1;
# twitterからstatusの取得
my $statuses;
{
use Net::Twitter;
my $twit = Net::Twitter->new;
eval {
$statuses = $twit->user_timeline({id=>$twuser, since_id => $since_id, count => $count });
exit unless @$statuses;
};
if ( my $err = $@ ) {
die $@ unless blessed $err && $err->isa('Net::Twitter::Error');
warn "HTTP Response Code: ", $err->code, "\n",
"HTTP Message......: ", $err->message, "\n",
"Twitter error.....: ", $err->error, "\n";
}
}
# ameba なうに投稿
{
my $mech = WWW::Mechanize->new();
#ログイン
my $response = $mech->get("http://www.ameba.jp/");
$response = $mech->submit_form(
form_name => "srvLoginForm",
fields => {
'amebaId' => $amuser,
'password' => $ampass
}
);
&abort(Dumper($response)) unless ($mech->success);
# なうページに移動
$response = $mech->get("http://now.ameba.jp/");
&abort(Dumper($response)) unless ($mech->success);
# 投稿
for my $status (reverse @$statuses ) {
print encode('utf-8', "$status->{id} $status->{created_at} <$status->{user}{screen_name}> $status->{text}\n");
$status->{text} =~ s/RT:/RN:/g; # AmebaなうではRN
$status->{text} =~ s/\@/>>/g; # Amebaなうでは>>
$response = $mech->submit_form(
form_name => "inputForm",
fields => {
'entryText' => $status->{text}
}
);
}
}
# status_id 更新
$yaml->{since_id}=@{$statuses}[0]->{id};
YAML::Tiny::DumpFile($datfile, $yaml);
1;
12/11 07:50 追記
RTをRNに置換するようにしました。
@xxx を >>xxxに置換するようにしました
多分、ちゃんとしたperlerの方々には許せないコードになっていると思いますので(汗)、是非コメント頂けばと思います!
ちなみに以前twitter2mixiをインストールしたときには、コードを一部改変して「mx:」という単語が入ったtweetのみ転送するようにしたことで、転送量を調整しました。一方、Amebaなうは、twitterのパクリとも言われてるように、つぶやきまくってなんぼだと思いますので、tweetをそのまま転送するようにしています。
あとパクリとはいえ、@やRT、ハッシュタグは仕様が違う(のかな?Amebaなう自体は全く使っていないので仕様不明、苦笑)と思うので、時間ができたらそのあたりを変換できるようにしたいです。
Catalystを使ってみる(2) - Catalyst::Plugin::Prototype
2006年2月13日 / Perl
ひとまず,CatalystでTinyURLを作ったところで(ほとんどコピーだけど),次はprototype.js/Ajaxとの連携です.
参考にしたのはantipop2.0: Catalyst で作る簡単 Web アプリケーション: Feed2JS 解説.ここには,XMLやAtomといったFeedをJavaScript形式に変換するFeed2JSの実装に関する解説があります.

