強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ターミナルで簡単に Twiter API を実行出来る「twurl」が便利

アプリケーションの登録申請

このコマンドは OAuth を利用する為、事前に「アプリケーションの登録申請」を行って OAuth よる Twitter のデータへアクセスを行える様にしておく必要が有ります。

この作業をまだ行ってない方は事前にこちらのページを参考に作業を事前に済ませておいて下さい。

TwitterOAuth認証を使う - 強火で進め
http://d.hatena.ne.jp/nakamura001/20100519/1274287901

事前準備

このコマンドは裏では Ruby で実行されているみたいです。自分が試した時には Ruby 用の OAuth ライブラリが入ってない為、エラーが発生しました。

という事で OAuth のライブラリがインストール済みで無い場合はインストールをしましょう。

gem install oauth

このコマンドを実行した時に以下の様なエラーが出た場合には sudo を先頭に追加して sudo gem install oauth で実行して下さい。

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.

認証作業

GitHub から twurl のファイルをダウンロードします。

marcel/twurl · GitHub
https://github.com/marcel/twurl

次に bin フォルダに移動し、以下を実行。

./twurl  authorize --consumer-key the_key --consumer-secret the_secret

the_key と the_secret には「アプリケーションの登録申請」を行った後に発行される Consumer key と Consumer secret の文字列を記述します。

すると以下の様な出力がされます。

Go to https://api.twitter.com/oauth/authorize?oauth_consumer_key=(中略) and paste in the supplied PIN

URLにブラウザでアクセスし、 OAuth の許可をすると PIN (数字の羅列)が画面に表示されますので表示された数字をターミナルに入力します。

成功したら画面に「Authorization successful」と表示されます。

ここで設定した情報は ~/.twurlrc に保存されます。必要が無くなった場合は削除しておきましょう。

使ってみる

タイムラインを取得してみます。

./twurl /1/statuses/home_timeline.xml

取得したデータがずらずらと出力されたかと思いますがこれだとちょっとこれだと見づらいですね。ファイルに出力してブラウザで確認しましょう。

以下のコマンドを実行した後に output.xml をブラウザにドラッグして確認して下さい。

./twurl /1/statuses/home_timeline.xml > output.xml; open .

API

twurl に記述する API については Twiter のこちらのサイトを参照下さい。

REST API v1.1 Resources | Twitter Developers
https://dev.twitter.com/docs/api/1.1

こちらのドキュメントには以下の様な記述例が載っています。

https://api.twitter.com/1.1/statuses/mentions_timeline.json

ドメイン以降の部分を抽出して利用すればOKです。この API の場合は以下の様に使います。

./twurl /1.1/statuses/mentions_timeline.json
注意点

最初のタイムラインの取得では以下のコマンドを使いました。

./twurl /1/statuses/home_timeline.xml

しかし、この記述は API のバージョン 1.0の記述となります1.0は2013年3月5日までしか使えません。

Twitter API 1.0の期限などのメモ - 強火で進め
http://d.hatena.ne.jp/nakamura001/20121119/1353324290

それ以降は以下の様な記述になります。

./twurl /1.1/statuses/home_timeline.json

バージョン 1.0では以下の様にXMLJSONのいずれのレスポンスも取得可能です。

./twurl /1/statuses/home_timeline.xml
./twurl /1/statuses/home_timeline.json

しかし、1.1からはJSONのレスポンスしか返してくれません。その点ご注意下さい。

ターミナルだとレスポンスが見づらい

レスポンスが数値文字参照( \u3066 の様な記述)に成っているのでターミナルだと見づらいという問題が有りますがこちらについてはこちらのブログで紹介されている方法を使うと良いでしょう。

ターミナルでtwurlの結果をjsonで出力する - webクリエイターのひとりごと
http://cutmail.hatenablog.com/entry/20101021/1287653522

API のバージョン 1.1で取得したデータを PHP で変換する場合の記述はこんな感じになります。

./twurl '/1.1/statuses/home_timeline.json' | php -r 'while(!feof(STDIN)) { print_r(json_decode(fgets(STDIN))); }'

Alias

twurl コマンドは便利ですが毎回こんなに長いコマンドを入力するのは大変です。しかし、 twurl には alias という便利な機能が有ります。

この様な記述をすると

./twurl alias h /1.1/statuses/home_timeline.json

以下の記述で同じコマンドを実行する事が出来ます。

./twurl h