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 : ボンゴインターナショナルへの登録と注意

ダンス教室の子どもの挨拶はおかしい


エイベックスダンスマスターとかいう子ども向けのダンス教室では講師や生徒の子どもたちが「お疲れさま」といって帰っていく。ジムには他に空手などの教室もあるのだが、こっちの子どもは普通に「さよならー」っ...つづきはこちら