26
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsで外部APIを使用する

Posted at

今回はRailsでぐるなびのAPIを使用してみようと思います。
すでにぐるなびAPIのKeyを取得している、という前提で話をすすめます。
下記のコードでは「ラーメン」で検索すると、それに対する店のデータ10件が返ってきます。

require 'json'
require 'net/https'
require "uri"

word="ラーメン"

data={
  "keyid": "あなたのAPI-Key",
  "freeword": word
}

query=data.to_query
uri = URI("https://api.gnavi.co.jp/RestSearchAPI/20150630/?"+query)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new(uri)
res = http.request(req)
res_data=Hash.from_xml(res.body)

いくつかポイントとなるところを説明します。
まず、以下の箇所ですが、

data={
  "keyid": "あなたのAPI-Key",
  "freeword": word
}

こちらのハッシュでkeyに指定した文字列、keyidやfreewordは適当につけた名前ではなく、
リクエストパラメータで指定された文字列です。
どのようなパラメータがあるかは、各APIの仕様で確認してください。
次に、この箇所、

query=data.to_query
uri = URI("https://api.gnavi.co.jp/RestSearchAPI/20150630/?"+query)

この2行ではdataのハッシュをURL文字列に変換します。
ハッシュがURLパラメータ用に変換されます。
例 : {c: 3, b: 2, a: 1}.to_query # => "a=1&b=2&c=3"
そして文字列のダブルクォーテーション("")の最後に?を入れて+queryを付け加えると、
変数のqueryが""のURLの文字列の最後に追加されるようになっています。

最後に、この部分のコードですが、

res_data=Hash.from_xml(res.body)

ぐるなびAPIの場合レスポンスはjsonファイルではなくXML形式ですので、xmlでデコードしなければなりません。
res_dataの中にはハッシュ型に変換されたデータが入っています。

ちなみにレスポンスがjsonファイルの場合、
res_data=JSON.parse(res)
というように変更します。

Net::HTTPクラスについては公式にあります。
class Net::HTTP (Ruby 2.6.0)

26
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?