第38回 RubyでWeb API
Net::HTTPを使ってWeb APIをたたくソース
require 'net/http'; Net::HTTP.version_1_2; ############################################################ # URLを定義する ############################################################ url = { :scheme => 'http', # 今回使わない :server => 'api.twitter.com', :port => 80, :path => '/1/statuses/user_timeline.json', :query => 'screen_name' + '=' + 'koduki' }; ############################################################ # 接続してGETの結果を表示 ############################################################ begin Net::HTTP.start(url[:server], url[:port]) {|http| response = http.get(url[:path] + '?' + url[:query]); puts response.body; } rescue Exception puts $! end
ここまでの参考資料
るびま
http://twitool-box.net/api-viewer/
http://dev.twitter.com/doc/get/statuses/user_timeline
Net::HTTPの例外補足方法 - OVERT MEMO
受け取ったJSONをRubyオブジェクトにしよう
Ruby1.8ではJSONからRubyオブジェクトを作れるものが標準で入ってないようなので、gemで入れることにする。
いきなり gem が、
RROR: While executing gem ... (Gem::RemoteSourceException) HTTP Response 302 fetching http://gems.rubyforge.org/yaml
と言って、こけた。
どうも、取りにいくサーバーが変わっちゃたみたいで、さらに取りいくサーバが変わっちゃったから update もままならないみたい。
じゃあどうするかというと、自分で、 gemのファイルを落としてきて、それを使ってアップデートするみたい。
参考:AIR - 覚書 Wiki*
InstantRailsの悪夢 - asanonoの日記
http://rubyforge.org/projects/rubygems/
上記参考通り、
ファイルのダウンロード後 $ sudo gem i rubygems-update-1.3.7.gem $ sudo update_rubygems $ sudo gem install json
でうまく 入ったみたい。
いきなりですがgemの使い方
入ったので、
require 'json';
したけど、ないといわれた。 そんな馬鹿な!。
なんとgemで入れたものは、ソースの最初に、
require 'rubygems';
って書かないとダメみたい。
いよいよJSONで取得した文字列をオブジェクトに生成するソース
ここで、いよいよソースの掲載。
いやーはまった。はまった。
p で見ると日本語が16進数で見えちゃうんだもんな。どうしようかと思った。
putsで見ればちゃんと日本語で見えるのね。
参考:UTF8が16進文字列に化ける(変わる?) -教えてください。Nokogiriと- Ruby | 教えて!goo
では、ソースです。
require 'rubygems'; require 'net/http'; require 'json'; Net::HTTP.version_1_2; ############################################################ # URLを定義する ############################################################ url = { :scheme => 'http', # 今回使わない :server => 'api.twitter.com', :port => 80, :path => '/1/statuses/user_timeline.json', :query => 'screen_name' + '=' + 'koduki' }; ############################################################ # 返ってきたJSONをパースして生成されたオブジェクト用変数 ############################################################ res_obj = nil; ############################################################ # 接続してGETの結果を取得 ############################################################ begin Net::HTTP.start(url[:server], url[:port]) {|http| res_obj = JSON.parse( http.get(url[:path] + '?' + url[:query]).body ); } rescue Exception puts $! end ############################################################ # 取得したオブジェクトを表示 ############################################################ puts res_obj;
ということでkoduki君の最新20件の発言を表示するのはこれだ
紅月さん@がんばらない (@koduki) | Twitter
require 'rubygems'; require 'net/http'; require 'json'; Net::HTTP.version_1_2; ############################################################ # URLを定義する ############################################################ url = { :scheme => 'http', # 今回使わない :server => 'api.twitter.com', :port => 80, :path => '/1/statuses/user_timeline.json', :query => 'screen_name' + '=' + 'koduki' }; ############################################################ # 返ってきたJSONをパースして生成されたオブジェクト用変数 ############################################################ res_obj = nil; ############################################################ # 接続してGETの結果を取得 ############################################################ begin Net::HTTP.start(url[:server], url[:port]) {|http| res_obj = JSON.parse( http.get(url[:path] + '?' + url[:query]).body ); } rescue Exception puts $! end ############################################################ # koduki君の最新20件を表示 ############################################################ puts res_obj.map{|item| item['text']}.join("\n");
サーバ構築
サーバ構築に関するページも作成しました。
プログラムを動かす環境がないというかたは、検討してみてはいかがでしょうか。
http://www.x-shenwu.net/~home_page/sakura_vps/