読者です 読者をやめる 読者になる 読者になる

Bonkura - Kenny

SIerで働く文系SEの記録

【Ruby】net/httpの使い方(JSON形式APIを扱う)

JSON形式のAPIRubyで扱う時のメモ。
net/httpライブラリを使う。
「Webはステートレスなやりとりを行う」という事を意識するとわかりやすい。

URIを扱うライブラリ:uri

URI.parse('~~')とする事で、URIオブジェクトを生成できる。
メソッドによって値を取得できる。下記の通り。

uri.scheme: "http"
uri.host: "jp.rubyist.net"
uri.port: 80 (省略されていたので HTTP のデフォルトポート番号)
uri.path: "/magazine/"
uri.query: "0015-BundledLibraries"
uri.fragment: "l5"

簡単にHTTPにアクセス出来るライブラリ:open-uri

→File#openのファイル名の部分をURLに置き換えるだけでopenがそのままHTTPクライアントになる。

open(url) do |f|
  f.each_line { |line|
    p line
  }
end

※簡単に書くと・・・
open(url).read.display

より複雑な事がしたい時:net/http

・Net::HTTP#startメソッドは、HTTPセッションを開始するメソッド
・Net::HTTP#startメソッドにブロックを渡すと、ブロックの終了までセッションが継続される。
・Net::HTTP#getメソッドは、pathにあるエンティティを取得し、HTTPResponseを返す。

書き方テンプレート

#requireする。
require 'json'
require 'uri'
require 'net/http'
require 'pp'

#uriオブジェクトを生成する。
uri = URI.parse('ほにゃぺけ.json')

#httpプロトコルで接続するための、Net::HTTPオブジェクトを生成する。
http = Net::HTTP.new(uri.host,uri.port)

#GETリクエストを飛ばし、requestを取得
res = http.start do
  http.get(uri.request_uri)
end

#ステータスコードが200なら、JSON形式のrequrestをparseする。
if res.code == '200'
  result = JSON.parse(res.body)
  pp result
else
  puts "ERROR"
end

POSTリクエストの書き方@エンコード含む

Net::HTTP.start(server,80) { |http|

  response = http.post('/questsearch',"word=iPad")
  puts response.body.encode('utf-8','euc-jp',:invalid => :replace, :undef => :replace)

}

※第一引数にpath、第二引数にquery


以上。難しいですねぇ。