なんとか年末に追い込みをかけて、mruby-uvとmruby-httpベースのmruby-oauthを完成させました。ベースはiij/mrubyの実装を再利用しています。
mruby-uvは名前解決のメソッドが現状用意されていないので実装し、mruby-simplehttpとmruby-httprequestを書き直して、それらを継承しmruby-oauthを作成しました。
インストール
build_my_mrubyというレポジトリにインストールスクリプトを容易しているので、そのスクリプトを実行します。
cd build_my_mruby
sh mymruby_with_mrbgems.sh
上記のスクリプトを実行するとカレントディレクトリにmrubyをダウンロードしてきて、必要なmrbgemsを自動で組み込んでくれます。そして、mrubyディレクトリ以下のbinディレクトリ内にmrubyバイナリが生成されます。このバイナリを使うことによって、容易にmruby-oauthを試すことができます。
./bin/mruby --version
mruby-oauthの依存mrbgemsは以下の通りです。
mruby-http
mruby-digest
mruby-pack
mruby-simplehttp
mruby-httprequest
mruby-json
mrubyでtwitterをポストしてみる
例えば、tweetをpostする場合は以下のようなコードを書きます。
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
API_URL = 'http://api.twitter.com/1.1/statuses/update.json'
tweet = "happy new year from mruby-oauth"
ex_headers = {'Content-Type' => 'application/x-www-form-urlencoded'}
twitter = OAuth.new(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
response = twitter.post(API_URL, {:status => tweet}, ex_headers)
if response.code.to_i == 200
puts "tweet success: #{tweet}"
else
puts "tweet failed: #{tweet}: bellow response"
p response
end
このスクリプトを以下のように実行します。
すると以下のようにtwitterにtweetされるでしょう。
happy new year from mruby-oauth
— MATSUMOTO, Ryosukeさん (@matsumotory) 12月 31, 2012
いいですね!
mrubyでtimelineを取得してみる
以下のようにコードを書きます。
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
GET_API_URL = 'http://api.twitter.com/1.1/statuses/user_timeline.json?count='
tweet_num = 5
twitter = OAuth.new(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
response = twitter.get(GET_API_URL + tweet_num.to_s)
if response.code.to_i == 200
data = JSON::parse(response.body)
data.each do ¦d¦
puts "#{d["user"]["screen_name"]}'s tweet: #{d["text"]}"
end
else
puts response.body
raise "Request failed: " + response.code.to_s
end
tweet_numに取得したい最新tweetからのtweetの数を設定します。このスクリプトを実行すると以下のように出力されます。
matsumotory's tweet: “[December 2012] mruby news - mruby.sh” http://t.co/fPAekF0t
matsumotory's tweet: happy new year from mruby-oauth
matsumotory's tweet: happy new year from mruby-oauht
matsumotory's tweet: mrubyist達が年明けに向けてラストスパートしている。僕はmruby-oauthができたので見守るだけである。
自分のtweetを5個表示することができました。
いいですね!
自分のタイムラインを流し続ける
以下のようなスクリプトを書けば、ストリーミングのように自分のタイムラインをコンソールに流し続けられます。
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
GET_API_URL = 'http://api.twitter.com/1/statuses/home_timeline.json?count='
tweet_num = 10
interval = 60
twitter = OAuth.new(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
new_id = 0
old_id = 0
while
response = twitter.get(GET_API_URL + tweet_num.to_s)
if response.code.to_i == 200
data = JSON::parse(response.body)
if old_id == 0 ¦¦ old_id != data[0]["id"].to_i
new_id = data[0]["id"].to_i
data.reverse.each do ¦d¦
if old_id < d["id"].to_i
puts "#{d["user"]["screen_name"]}'s tweet: #{d["text"]}"
end
end
old_id = new_id
end
else
puts response.body
raise "Request failed: " + response.code.to_s
end
Random.sleep interval
end
いいですね!
mrubyを開発しつつ、mrubyでツイートのタイムラインを眺めるのは粋ですね!
最後に
このようにmruby-oauthを使って、mrubyで簡単にOAuthを使ってtwitterを操る事ができました。OAuthを使ったWebサービスであれば、これで自由に操作することができるでしょう。
mrubyはとても面白いので、みんなでmrbgemを作りましょう!
0 Comments.