このエントリーをはてなブックマークに追加
スポンサーリンク

Net::Twitter::Liteのインストール

Net::Twitter::Lite インストールメモ

ツイッターアプリ1.0は公開を終了しました。なので、今度からはツイッターのタイム・ラインはアプリ1.1で取得しなければなりません。しかし、今まではxml形式だったので自力でパースできなくもなかったんですけど、今度からはjson形式のみとなり、また、ただGETするだけでなく、タイムラインを取得するためにユーザー認証が必要となりました。そのため、自力でのタイムライン取得は困難です。(もっとも、私のスキルが足りないせいもあるのですが)

そこで、PerlモジュールのNet::Twitter::Liteをインストールします。

依存性の解決

Net::Twitter::Liteを動作させるために、他にもさまざまなモジュールを要求します。私のように最小インストールして、必要なもののみを追加するような人には依存性の解決が大変だと思います。ここで、私のサーバーで追加したモジュールを示します。これはあくまで私のサーバーの場合であって、他のサーバーでは異なりますので、参考程度にご覧ください。

Perl-OSType-1.003.tar.gz
Parse-CPAN-Meta-1.4404.tar.gz
Net-OAuth-0.28.tar.gz
Module-Metadata-1.000014.tar.gz
Module-Install-1.06.tar.gz
Module-Build-0.4005.tar.gz
JSON-2.59.tar.gz
ExtUtils-MakeMaker-6.68.tar.gz
ExtUtils-ParseXS-3.18.tar.gz
ExtUtils-CBuilder-0.280205.tar.gz
CPAN-Meta-2.131560.tar.gz
CPAN-Meta-YAML-0.008.tar.gz
Class-Data-Inheritable-0.08.tar.gz
Class-Accessor-0.34.tar.gz

これらのモジュールはCPANで探すか、ファイル名で直接ググれば、どっかには落ちてると思います。もちろん、既にサーバーにインストールされている場合は不要です。

しかし、CPANのシェル・コマンドのinstallを使うと make testでエラーが出て止まってしまう場合があるので、なるべく手動でインストールします。どうも、64ビット環境ではmake testでエラーの出るモジュールがいくつかあるようなのですが、実際に動作は問題がないケースが多いようです。

Net::Twitter::Liteのインストール

CPAN等からNet-Twitter-Lite-0.12006.tar.gzを取得して、FTPでアップするか、あるいは直接wgetでサーバーに持ってきます。

tar xvzf Net-Twitter-Lite-0.12006.tar.gz
cd Net-Twitter-Lite-0.12006

ここで、Makefile.PLが存在しないので、perl Makefile.PLと入力してもエラーになってしまうと思います。そこで手動でコピーします。
cp -pr lib/Net/Twitter /usr/lib/perl5/5.8.8/Net/

コピー先は当然ですが、Linuxのディストリビューション、Perl本体のインストールのし方、Perlのバージョンによっても異なりますので、それぞれの環境に合わせて読み替えてください。Linuxの場合、他のサーバーの環境で叩いたコマンドがそのままコピペで使える事は稀です。

コンシューマーキーとアクセストークンの入手

ツイッターのAPIを使うためには、ツイッターのサイトにて、どういうアプリで使うぞという事を申請して、 コンシューマーキーとアクセストークンをもらわなければなりません。 それによって、もしAPIを乱暴に使って(たとえば、ものすごい頻度でサーバーにアクセスして)、サーバーに負荷をかけてしまった、などの場合、 ツイッター側としてはコンシューマーキーやトークンを停止させる等の措置ができます。

まずはこちら
https://dev.twitter.com/apps

に行って、Create a new application ボタンを押してください。すると、アプリの名前や、どういう事をするアプリなのか、アプリを設置するURLなどを聞かれるので入力します。そして、規約の後のagreeのチェックボックスにチェックを入れて、キャプチャー文字を入力して、Create a new application ボタンを押すと、アプリの申請が終了します。

後はトップメニューに戻って、作成したアプリのボタンをクリックしてください。

Consumer key
Consumer secret
Access token
Access token secret

という項目があるので、この項目に記された値をコピペして、Perlのソースにセットします。

改造する

Net-Twitter-Lite-0.12006にはマニュアルにあるtrends_place(id)というメゾットが存在しません。多分忘れたんだと思いますが、 困ったことにこのモジュールを使ってる人がまだ誰もいないのか、文句言われてるけどスルーしてるのか知りませんが、 このままではトレンドワードを取得する事ができません。仕方がないので、自分でtrends_locationというメゾットを作ってしまいましょう。

vi /usr/lib/perl5/5.8.8/Net/Twitter/Lite/API/V1_1.pm
        [ 'trends_location', {
            aliases         => [ qw// ],
            path            => 'trends/place',
            method          => 'GET',
            params          => [ qw/id/ ],
            required        => [ qw/id/ ],
            add_source      => 0,
            deprecated      => 0,
            authenticate    => 1,
            booleans        => [ qw// ],
            base_url_method => 'apiurl',
        } ],
1071行目あたり(trends_closestの定義の下)に追加しちゃいます。まあ、Net-Twitter-Liteの作者がこのサイトを見て直していただけるのであれば、 おそらく次のバージョンからは直っているでしょう。0.12006以降のバージョンでは直ってるかもしれないので、 追加する前にtrends_locationというメゾットがない事を確認してくださいね。じゃないと多重定義になっちゃいますんで。

え?使い方ですか?いや、あんまりソース公開するとコピペされてそれが広まっちゃいそうなんで、公開したくないんですが、 そういう自分も今の今まで色々なサイトからコピペさせていただいたので、たまには自分もコピペ元を作らないとね。
$woeid=23424856;
$res=$twitter->trends_location({id => $woeid});
$trend_list = $res->[0]->{'trends'};
foreach $trends (@$trend_list) {
	$trend=$trends->{'query'};
	$trend=urldecode($trend);
	Encode::from_to($trend, 'utf8', 'euc-jp');
	print "トレンドワードは".$trend."です\n";
}
最初に言っておきますが、これは長いプログラムの一部なんで、これだけコピペしても絶対に動きませんので念のため。 でも、サンプルを書いておかないと、メゾットの呼び出し方がわからないと思いまして一応ね。 自分用なんで(仕事用じゃないので)、エラーチェックとかまるっきりしてないし、あんまりこれをコピペして使うのはオススメできません。 あくまでメゾットの呼び方とデーターの取り出し方のヒントにしていただければ、と思います。

あと、これは自分用なのでUTF8をEUCに変換していますが、普段からUTF8で文字コードを扱っている人はEUC変換は不要ですので。 今はもうほとんどの人が文字コードをUTF8で扱っているとは思うのですが、という私はいまだにEUCコードを使っていたりします。 なかなか自分の今まで作ったプログラムを全部書き換えるわけにもいきませんからね。Poderosaの端末設定はずっとEUCのままです。
スポンサーリンク