BLOG > GENERAL

Net::Twitter::LiteでOAuth認証する


TwitterのAPIのOAuth認証への変更に伴い、ID/PASSWORDを使ったBASIC認証でボットやクライアントのプログラムをperlやphpで作ってた多くの人がこの時期ばたばたしていると思う。
うちのサーバはNet::Twitter入ってないからとLWP::UserAgentとか使っていた人が多いと思うが、OAuth認証となると素直にNet::Twitter(Net::Twitter::Lite)を使うのがやはり利口である。LWP::UserAgentを使いながら、OAuth認証系に特化したモジュールを追加する方法もあるがやはりめんどうなソースになる。
さて、OAuth認証を利用するにあたって事前にアプリ登録してコンシューマーキーやアクセストークンの取得等の基本的なことは後述のサイトさん等がわかり易いと思うのだが、簡単だと思ってたNet::Twitter::LiteでOAuth認証に思いのほか手こずってしまった。
TwitterのOAuth認証を説明しているサイトの多くで紹介されているのがNet::Twitterなのだが、Net::Twitterは依存モジュールが多すぎてレンタルサーバじゃインストールが大変?、ていうか無理?
それならばNet::Twitter::Liteを使おう、これならば簡単だーっと多くの方がNet::Twitter::LiteでOAuth認証する方法を選択すると思う。
がしかし、Net::Twitter::Liteだけポンと入れてやっても動くには動くがOAuth認証での投稿ができない。
Net::Twitter::LiteだってNet::Twitterほどではないが依存するモジュールがあるのだ。しかも、Net::Twitter::LiteをID/PASSWORDのBASIC認証で投稿するぶんには問題ないのだが、OAuth認証で投稿となると別途追加依存するモジュールがでてくるというわけだ。
私がはまった経緯はこんな感じだ。Net::Twitter::Liteをuseしてuse strictだuse warningsとして構文チェックしてみると、まずでるエラーが「JSON/Any.pmありません」のメッセージ。
OK、じゃJSON/Anyとりあえずいれました、リターンキーをカチッと、なに?JSONパッケージがない?、じゃJSONまるまるいれるぞ、これでOKだろう、それリターンキーをパチっと。
・・・・・。
・・・・・う、動かない・・・・、投稿されない・・・。
ていうか構文チェックしても文法的なエラーもない。モジュールのエラーもでない。なんで?。
ID/PASSWORDのBASIC認証で投稿ならばきちんと投稿される・・・。
・・・ここで丸1日悩んださー。・・・・。



これを読んでる方はperlであれば投稿部分で以下のようなものを書いてるはず

my $twit = Net::Twitter::Lite->new(
consumer_key => 'Consumer key',
consumer_secret => 'Consumer secret',
);
$twit->access_token ('Access Token');
$twit->access_token_secret('Access Token Secret');

$twit->update('this is test');
exit;

そうなのだ、戻ってくるエラーを見てないので、なんでだろう、有名どころと同じスクリプトなのになんでだろうと頭を抱える訳だ。私みたいなのはなんどもトークン取得し直したりしてるだろう。

そこでエラーを見られるようにちょっと修正する。

eval { $status = $twit->update('this is test') };
if ( $@ ) {
   warn "update failed because: $@\n";
}

warnのところは画面出力させるなりなんなり好きにするといいが、こうするとこれまでの構文チェックでみつからなかった足りないモジュールやらエラーがかえってくるようになる。
私の場合(?)、足らなかったモジュールはNet::OAuth、Class::AccessorとClass::Data::Inheritable。
これを入れたらやっと動いた。めでたしめでたし。

実用! PerlでコマンドラインからTwitter投稿(OAuth対応)

ついでだけど。
ログインしている状態で見る自分のアカウントのツイート一覧と、別ブラウザでログインせずに自分のアカウントのページにアクセスしてみるツイート一覧とでは更新状況が完全にずれており異なっている。
プログラムのテスト等では注意してみるといいかも、でないと「Status is a duplicate」という二重投稿を表すエラーに頭を抱えるかもしれません。

LINEで送る
PREV : 続 PageSpinnerのUTF8対応はどうなった
NEXT : ボンゴインターナショナルへの登録と注意

東京ガスの検針の人はどこから現れ、どこに消えるのか?


東京ガスの検針の人って、どこから来てどこに帰っていくんだろうか?。東京電力とか、水道とかの検針の人もいるけど、朝、大体同じ時間帯に現れて、すっと消えていくという感じがする。 自宅からそれぞれの制服を...つづきはこちら