こんにちは、廣幡です。
先月、他社の方と1ヶ月ハッカソンしたのですが、
そこでTwitterAPIを叩いて日本のトレンドワードを取得して日本地図に表示する
みたいなWebアプリケーションを作りました。
Rubyのoauthを使ったらとても簡単に取得できたので、
ここではTwitterへの認証から日本のトレンドワードの取得まで共有したいと思います。
流れは以下のような感じです。
Twitter認証
↓
日本のWOEID取得
↓
トレンドワード取得
準備
・Ruby 1.9 以上
・oauth
・TwitterのConsumer Key/Secret、Access Token/Token Secret
oauthは以下のコマンドでインストールする。
$ gem install oauth
TwitterAPIへの認証で
・Consumer Key (API Key)
・Consumer Secret (API Secret)
・Access Token
・Access Token Secret
が必要なので、この子たちをゲットしてきましょう。
この子たちは、こちらの記事を参考にしてゲット。
この子たちさえいてくれれば、もうTwitterAPIと仲良しこよしです。
注意点
Twitterのトレンドワードを取得してくるには、WOEIDというものを使わないといけません。
例えば東京のトレンドワードを取得してきたい場合には、東京のWOEIDを指定する必要があります。
このWOEIDはTwitter REST APIで取得できるのですが、現在全県には対応していません。
TwitterAPI認証
まず始めにTwitterの認証をクリアしないといけませんので、そのコードを用意します。
require 'oauth' # oauthを使うため require 'json' # Twitterのレスポンスがjsonのため # (`ェ´)ピャーとか言ってますが、ここに準備してきたConsumerKeyなどをいれてください。 consumer_key = '(`ェ´)ピャー' consumer_secret = '(`ェ´)ピャー' access_token = '(`ェ´)ピャー' access_token_secret = '(`ェ´)ピャー' consumer = OAuth::Consumer.new( consumer_key, consumer_secret, { :site => 'http://api.twitter.com', :scheme => :header } ) token_hash = { :access_token => access_token, :access_token_secret => access_token_secret } # Twitterへのリクエストトークン作成 request_token = OAuth::AccessToken.from_hash(consumer, token_hash)
この request_token
を使ってTwitterにリクエストを送ることで、Twitterの認証をクリアできます。
oauth簡単ですね!
日本のWOEID取得
日本のWOEIDを取得するために、Twitter REST APIの trends/available を使います。
先ほどのコードに加えて、以下のコードを付け足せば取得できます。
# trends/available response_available = request_token.request(:get, 'https://api.twitter.com/1.1/trends/available.json') # レスポンスがJSON形式のためパースする availables = JSON.parse(response_available.body) # 日本のWOEIDだけ取得 japan_woeid = nil availables.each do |available| if available["name"] == "Japan" then japan_woeid = available["woeid"] break end end
こんな感じのJSONが返ってきて、配列availables
に格納されます。
{ "name": "Winnipeg", "placeType": { "code": 7, "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2972", "parentid": 23424775, "country": "Canada", "woeid": 2972, "countryCode": "CA" }
これで日本のWOEIDが取得できましたね!
japan_woeid
に 23424856 が入っています!
効率が悪いコードなのはスルーして、最後にトレンドワードを取得してみましょう!
トレンドワード取得
トレンドワードを取得するには、Twitter REST APIの trends/place を使います。
先ほど取得したWOEIDを使うので、これも先ほどのコードに付け足していきましょう。
# trends/place response_place = request_token.request(:get, 'https://api.twitter.com/1.1/trends/place.json?id=' + japan_woeid.to_s) japan_trends = JSON.parse(response_place.body) # トレンドワード japan_trends[0]['trends'].each do |trend| puts trend['name'] end
こんな感じのJSONが返ってきます。
{ "trends": [ { "name": "ジャニワ", "query": "%E3%82%B8%E3%83%A3%E3%83%8B%E3%83%AF", "url": "http://twitter.com/search?q=%E3%82%B8%E3%83%A3%E3%83%8B%E3%83%AF", "promoted_content": nil }, ・・・ ] }
やったー!!!\(^o^)/
日本のトレンドワードが10個も取ってこれたー\(^o^)/
これを煮るなり焼くなり好きにするのはあなたです( ̄ー ̄)ニヤリ
ちなみに、ハッシュタグを含めた上位10件のトレンドワードを取得してくるようです。
ハッシュタグを含めたくないという方は、先ほどのコードの2行目を以下のコードに置き換えてください。
response_place = request_token.request(:get, 'https://api.twitter.com/1.1/trends/place.json?exclude=hashtags&id=' + japan_woeid.to_s)
まとめ
Twitter認証からトレンドワード取得までやってみました。
どうですか?簡単でしたね。
Rubyは1ヶ月程しか使ってなかったですが、すっきりしてていいですね。
感想:僕はこの子たちとイチャイチャできただけでも十分です。
ちなみに彼女はできませんでした。