TwitterAPI v1.1 に対応
Ruby+TwitterAPIを使用して日本やインドネシアのトレンド(ホットワード)を取得して関係者に配信していたが、6/12の朝、使用していたAPIのバージョンv1のサービスがついに終了してしまった。前から知っていたことではあるのだが... 使っていたサービスはトレンド取得だけ、OAuth認証も既に組み込んでいたので、エンドポイントであるURLだけ変更すれば簡単に終わるかとおもったら... やっぱり落とし穴?っていうか自分のテク不足だけなんだろう。google先生に聞いてみると、DevelopersサイトにSingle-user OAuth with Examplesページがあった。Rubyは一番下に書いています。今までいろいろなライブラリ駆使してコードを書いている感があったけど、oauthライブラリだけでいけそうだ。あとはJSONをパースする為のjsonライブラリくらいか... ということでさっそく試す。
URLに引数でID(WOEID)を指定することにより対象地域のホットワードを得ることができる。あとはGETしたJSONのtrendsをぐるぐる回しながら単語を出力。環境はWin7 32bit、Ruby1.8.7
require 'rubygems' require "oauth" require 'json' WOEID = ARGV[0] # 引数でホットワード取得場所のIDを得る #WOEID = '23424856' #日本 #WOEID = '1117034' #千葉 # Exchange your oauth_token and oauth_token_secret for an AccessToken instance. def prepare_access_token(oauth_token, oauth_token_secret) consumer = OAuth::Consumer.new("ここはConsumer Key", "ここはConsumer secret", { :site => "https://api.twitter.com", :scheme => :header }) # now create the access token object from passed values token_hash = { :oauth_token => oauth_token, :oauth_token_secret => oauth_token_secret } access_token = OAuth::AccessToken.from_hash(consumer, token_hash ) return access_token end # Exchange our oauth_token and oauth_token secret for the AccessToken instance. access_token = prepare_access_token("ここはAccess token", "ここはAccess token secret") response = access_token.request(:get, "https://api.twitter.com/1.1/trends/place.json?id=" + WOEID + "&exclude=hashtags") # id=WOEID ハッシュタグを除く t = Time.now # 時間取得 uploadDate = t.strftime("%Y/%m/%d %H:%M:%S.#{t.usec.to_s[0, 3]}") # 時間フォーマット if response.code == "200" then hash = JSON.parse(response.body) # JSON を parse seq = 0 hash[0]["trends"].each do |trends| # treds のループ seq += 1 name = trends["name"].to_s.kconv(Kconv::SJIS, Kconv::UTF8) # ホットワード url = trends["url"].to_s.kconv(Kconv::SJIS, Kconv::UTF8) # URL rowdata = [uploadDate, WOEID, seq, name, url].join("\t") # タブ区切り結合 print(rowdata,"\r\n") # 出力 end
無事成功! 結果の中に”父の日”があった。そうか明日は父の日だった。どうりで子供たちがこそこそしているわけだ。
Windows環境でjsonライブラリをインストールする場合
Windows環境にjsonライブラリを普通にインストールするとエラーになる。
>gem install json ERROR: http://rubygems.org/ does not appear to be a repository ERROR: Could not find a valid gem 'json' (>= 0) in any repository
こちらのサイトにあるjson-1.1.9-x86-mswin32.gemをダウンロードしてlocalファイルをインストールする必要がある。1年もたつともう忘れている。
>gem install json --local Successfully installed json-1.1.9-x86-mswin32 1 gem installed Installing ri documentation for json-1.1.9-x86-mswin32... Installing RDoc documentation for json-1.1.9-x86-mswin32...
これでOK!
対応している地域が増えていた
こんな便利なサイトを使うと開発が楽になる。twitSandbox1.1 認証できていれば確認したいAPIの結果をこのサイトで見ることができる。trends/availableでは現在ホットワードが提供されている地域を確認することが出来る。見ると千葉があった。前はなかったはず... バージョンアップで増えたのかな... また、trends/closestでは、緯度と経度を指定すると最寄のWOEIDを知ることもできる。住んでいる船橋市の緯度経度で試すと結果は千葉の1117034だった。あとは会社のproxy越えのコードを追加するだけか。とりあえず週末のお仕事1つ終了。