諸事情で更新が止まってしまいました、お久しぶりです。気付けばもうイブです、そう、最終日です。えっ
とりあえず貯めてた分を書いていく…うん。
ということでオレオレAdventCalendar2014 5日目です。
前回に引き続き今回はTwitter Souce Checkerに関する話を。
TwSCはツイートの情報を取得するのにTwitterのApplication-only authenticationを利用しています。これについては次回詳しくかくつもりですがとりあえずユーザー認可を伴わないTwitterAPI利用のためのアプリケーション認証です。
TwitterのOAuthフローを悪用したアプリに対処するためのツールなのに認可求めてたら意味わからないですよね()
Node.jsからTwitterOAuth2を使う
Node.jsでTwitter API1.1を使うにはいくつか定番ライブラリがありますがNode-Twitterやnode-twitter-apiはOAuth1.0aの一般的なユーザー認可用であってこれらのライブラリはApplication-only authenticationには利用できません。
と言っても心配する必要はなく、これらのライブラリがOAuthのベースに使ってるnode-oauthはOAuth2にも対応しており、サンプルでもTwitterAPIで利用する方法が提示されています。
OAuth2.prototype._request
を自分で叩く必要があるみたい、ってあたりです。TwitterAPIの場合OAuth2はGET専用なので気にする必要はないのですが。node-oauthでツイート検索ツールをつくる
node-oauthを実際に使ってみよう!ってことでコマンドラインツイート検索ツールをサンプルで作りました()
本来なら分けるべきところまとめたり即時関数多用したりクソ読みにくいコードになりました()ツイート検索しか能がないです。
とりあえず順を追って説明
まずはプロジェクトディレクトリにpackage.json
をつくっておく。いつも通りnpm initしておけばいい。あるいはWebStormとかでも作れるし自由に。もちろん自分で書けばいいんだけど。
今回はコマンドライン用なのでargvで検索オプション指定できるようにした(メンテされてナイキもするけどまあ使えるしいいや)のとCoffee-Scriptで書いた。
とりあえず必要ライブラリのインストール
1 |
npm install --save oauth coffee-script argv |
とりあえずindex.jsでCoffee即時実行できるようにして本体読み込ませるようにした。
1 2 |
require("coffee-script/register"); module.exports = require("./lib/twitter-search"); |
※この先はtwitter-search.coffee
まず必要なライブラリのインクルード
1 2 3 |
{OAuth2} = require 'oauth' querystring = require 'querystring' argv = require 'argv' |
で、argv
はテキトーに。
OAuth認可
1 2 3 4 5 6 7 8 9 10 |
# OAuth2 Classのセットアップ Twitter = new OAuth2(client_id ,client_secret ,baseurl ,null ,'oauth2/token' ,null ) # アクセストークンの取得 Twitter.getOAuthAccessToken "", {grant_type:'client_credentials'},(e,access_token,refresh_token,res)-> return error(e) if e _access_token = access_token # アクセストークンを保存 _refresh_token = refresh_token # ※ Twitterではrefresh_tokenはない。 Twitter.useAuthorizationHeaderforGET true # queryではなくAuthorizeヘッダでトークンを送る callback(access_token) |
基本的にはコメントで書いた通り。なおbaseurlはhttps://api.twitter.com/
GETメソッドを叩く
APIの各メソッドをたたくのもTwitter.get
するだけ。
とりあえずこんなのを作っておくと楽
1 2 |
get = (url,callback)-> Twitter.get(baseurl+"1.1/"+url,_access_token,callback) |
検索する
同様にこれを…
1 2 3 |
search = (query,callback)-> q = querystring.stringify(query)# obj2query get('search/tweets.json?'+q,callback) |
こんな感じに呼ぶ
1 2 3 4 |
search q,(err,result,response)-> return console.error(err) if err res = JSON.parse(result) # do something... |
これでとりあえず検索ができる。(雑すぎ)
node-twitter-searchを使ってみる
今回はついでにbinも設定したのでnpm install -g
すればすぐに使えるようになってる。
Install
1 |
npm install -g kimama1997/node-twitter-search |
npm installでGitHub
のURLをフルで書いてるの見かけるけど省略できるからねっ!インストールしたら-hでヘルプ見れば使い方は一通り出る。(と思って手元で試してみたら400吐かれたクソnpmが())ヘルプが手抜きに見えるのはきのせい。説明少ないけどわかるよねっ!
Usage
とりあえず朝の挨拶ちぇっく!
1 |
twitter-search おはよー |
多分botのツイートがいっぱい返ってくる。時間によるけどね。
Option
説明省いてたりするけど基本的にTwitterの検索演算子をオプション化してる。
1 2 3 |
twitter-search -f java_shit twitter-search --from=java_shit twitter-search "from:java_shit" |
これらはいずれも同じということ。なお-r(–rt)はvalueはいらない。
Helpともう一つだけ例外があって --rate_limit_status
をつけた。名前の通りレートリミットを取得する。実はこのトークン、あれ(察して)のやつだけどいつも減ってるやつがある…どういうことだ…
むすび
とりあえずまぁこんな感じでTwitterAppOnlyAuthを使ってツイートを取得できました。
次回はApplication-only authenticationについてもうちょい書いていきたいと思うけど…いつになるやら()
あとTwitterネタでちとく氏がAdventCalendar14日目(7日目)参加してくれました。そちらもどうぞ。