レストラン検索API


URL:http://api.gnavi.co.jp/RestSearchAPI/20150630/

※旧バージョン(http://api.gnavi.co.jp/ver1/RestSearchAPI/)をお使いの場合は、こちらのバージョンに変更をお願いします。
詳細は、「APIのURL変更のお知らせ」をご確認ください。

リクエストパラメータ

※リクエストパラメータがkeyidのみの場合は、パラメータ不足のため、エラーとして値が返ります。

パラメータ名 必須 説明 備考
keyid string アクセスキー ぐるなびより提供されたアクセスキー
id   string 店舗ID 「,」区切りで店舗IDを複数検索可能(10個まで)
format   string レスポンス形式 xmlまたはjson(callback関数指定時にJSONP形式で出力)
callback   string コールバック関数 formatが「json」の場合のみ
name   string 店舗名 UTF-8でURLエンコードすること
name_kana   string 店舗名読み カタカナで指定
UTF-8でURLエンコードすること
tel   string 電話番号 ハイフン必須
address   string 住所 (都道府県+市町村+番地)の文字列をUTF-8でURLエンコードすること
area   string 地方コード コードはエリアマスタ取得APIより取得
pref   string 都道府県コード コードは都道府県マスタ取得APIより取得
areacode_l   string エリアLコード コードはエリアLマスタ取得APIより取得
areacode_m   string エリアMコード コードはエリアMマスタ取得APIより取得
areacode_s   string エリアSコード コードはエリアSマスタ取得APIより取得
category_l   string 大業態コード コードは大業態マスタ取得APIより取得
category_s   string 小業態コード コードは小業態マスタ取得APIより取得
input_coordinates_mode   integer 入力測地系タイプ 入力する緯度/経度の測地系のタイプを指定
1:日本測地系、
2:世界測地系(デフォルト:日本測地系)
equipment   string 設備・サービス 設備・サービスの文字列をUTF-8で
URLエンコードすること

※2015年8月末に提供を終了しました
coordinates_mode   integer 測地系タイプ レスポンスに含まれる緯度/経度の測地系を指定
1:日本測地系、2:世界測地系(デフォルト:日本測地系)
latitude   number 緯度 分秒十進式
input_coordinates_mode(入力測地系タイプ)の選択したタイプの値で指定
longitude   number 経度 分秒十進式
input_coordinates_mode(入力測地系タイプ)の選択したタイプの値で指定
range   integer 範囲 緯度/経度からの検索範囲(半径)
1:300m、2:500m、3:1000m、4:2000m、5:3000m
(デフォルト:500m)
sort   integer ソート順 レスポンスデータのソート順
指定なし:ぐるなびソート順
1:店舗名、2:業態
offset   integer 検索開始位置 検索開始レコードの位置(デフォルト:1)
hit_per_page   integer ヒット件数 一度リクエストで得るレスポンスデータの最大件数(デフォルト:10)
offset_page   integer 検索開始ページ 検索開始ページ位置(デフォルト:1)
freeword   string フリーワード検索 検索ワードをUTF-8でURLエンコードすること「,」区切りで複数ワードが検索可能(10個まで)
freeword_condition   integer フリーワード検索条件タイプ フリーワード検索の条件を指定
1:AND検索、2:OR検索(デフォルト:AND検索)
lunch   integer ランチ営業あり 0:絞込みなし(デフォルト)、1:絞込みあり
no_smoking   integer 禁煙席あり 0:絞込みなし(デフォルト)、1:絞込みあり
card   integer カード利用可 0:絞込みなし(デフォルト)、1:絞込みあり
mobilephone   integer 携帯の電波が入る 0:絞込みなし(デフォルト)、1:絞込みあり
bottomless_cup   integer 飲み放題あり 0:絞込みなし(デフォルト)、1:絞込みあり
sunday_open   integer 日曜営業あり 0:絞込みなし(デフォルト)、1:絞込みあり
takeout   integer テイクアウトあり 0:絞込みなし(デフォルト)、1:絞込みあり
private_room   integer 個室あり 0:絞込みなし(デフォルト)、1:絞込みあり
midnight   integer 深夜営業あり 0:絞込みなし(デフォルト)、1:絞込みあり
parking   integer 駐車場あり 0:絞込みなし(デフォルト)、1:絞込みあり
memorial_service   integer 法事利用可 0:絞込みなし(デフォルト)、1:絞込みあり
birthday_privilege   integer 誕生日特典あり 0:絞込みなし(デフォルト)、1:絞込みあり
betrothal_present   integer 結納利用可 0:絞込みなし(デフォルト)、1:絞込みあり
kids_menu   integer キッズメニューあり 0:絞込みなし(デフォルト)、1:絞込みあり
outret   integer 電源あり 0:絞込みなし(デフォルト)、1:絞込みあり
wifi   integer wifiあり 0:絞込みなし(デフォルト)、1:絞込みあり
microphone   integer マイクあり 0:絞込みなし(デフォルト)、1:絞込みあり
buffet   integer 食べ放題あり 0:絞込みなし(デフォルト)、1:絞込みあり
late_lunch   integer 14時以降のランチあり 0:絞込みなし(デフォルト)、1:絞込みあり
sports   integer スポーツ観戦可 0:絞込みなし(デフォルト)、1:絞込みあり
until_morning   integer 朝まで営業あり 0:絞込みなし(デフォルト)、1:絞込みあり
lunch_desert   integer ランチデザートあり 0:絞込みなし(デフォルト)、1:絞込みあり
projecter_screen   integer プロジェクター・スクリーンあり 0:絞込みなし(デフォルト)、1:絞込みあり
with_pet   integer ペット同伴可 0:絞込みなし(デフォルト)、1:絞込みあり
deliverly   integer デリバリーあり 0:絞込みなし(デフォルト)、1:絞込みあり
special_holiday_lunch   integer 土日特別ランチあり 0:絞込みなし(デフォルト)、1:絞込みあり
e_money   integer 電子マネー利用可 0:絞込みなし(デフォルト)、1:絞込みあり
caterling   integer ケータリングあり 0:絞込みなし(デフォルト)、1:絞込みあり
breakfast   integer モーニング・朝ごはんあり 0:絞込みなし(デフォルト)、1:絞込みあり
desert_buffet   integer デザートビュッフェあり 0:絞込みなし(デフォルト)、1:絞込みあり
lunch_buffet   integer ランチビュッフェあり 0:絞込みなし(デフォルト)、1:絞込みあり
bento   integer お弁当あり 0:絞込みなし(デフォルト)、1:絞込みあり
lunch_salad_buffet   integer ランチサラダバーあり 0:絞込みなし(デフォルト)、1:絞込みあり
darts   integer ダーツあり 0:絞込みなし(デフォルト)、1:絞込みあり

レスポンス

パラメータ名
(タグ名、@付きは属性名)
出現回数 説明 備考
Response 1 complexType レスポンスルートノード  
@api_version - string APIのバージョン  
total_hit_count 1 integer 該当件数  
hit_per_page 1 integer 表示件数  
page_offset 1 integer 表示ページ  
rest 複数回 complexType レストラン情報  
id 1 string 店舗ID  
update_date 1 timestamp 情報更新日時  
name 1 string 店舗名称  
name_kana 1 string 店舗名称(カタカナ)  
latitude 1 number 緯度 度分秒十進数
longitude 1 number 経度 度分秒十進数
category 1 string フリーワードカテゴリー  
url 1 string PCサイトURL  
url_mobile 1 string 携帯サイトURL  
coupon_url 1 complexType クーポンURL  
pc 1 string PC用URL  
mobile 1 string 携帯用URL  
image_url 1 complexType 店舗画像  
shop_image1 1 string 店舗画像1のURL  
shop_image2 1 string 店舗画像2のURL  
qrcode 1 string QRコード画像のURL  
address 1 string 住所  
tel 1 string 電話番号  
tel_sub 1 string 電話番号(サブ)  
fax 1 string FAX番号  
opentime 1 string 営業時間  
holiday 1 string 休業日  
access 1 complexType アクセス  
  line 1 string 路線名  
station 1 string 駅名  
station_exit 1 string 駅出口  
walk 1 integer 徒歩(分) 通常は、徒歩何分です。(例外:車10)
note 1 string 備考  
parking_lots 1 integer 駐車場台数  
pr 1 complexType PR文  
  pr_short 1 string PR文(短:最大50文字)  
pr_long 1 string PR文(長:最大200文字)  
code 1 complexType コード類  
  areacode 1 string 地方コード  
areaname 1 string 地方名称  
prefcode 1 string 都道府県コード  
prefname 1 string 都道府県名称  
areacode_s 1 string エリアSコード  
areaname_s 1 string エリアS名  
category_code_l 複数回 string 大業態コード  
  @order - number オーダー レコード番号
category_name_l 複数回 string 大業態名称  
  @order - number オーダー レコード番号
category_code_s 複数回 string 小業態コード  
  @order - number オーダー レコード番号
category_name_s 複数回 string 小業態名称  
  @order - number オーダー レコード番号
budget 1 integer 平均予算  
party 1 integer 宴会・パーティ平均予算  
lunch 1 integer ランチタイム平均予算  
credit_card 1 string クレジットカード名称  
e_money 1 string 電子マネー名称  
equipment 1 string 設備 ※2015年8月末に提供を終了しました
flags 1 complexType フラグ類  
  mobile_site 1 integer モバイルサイトありフラグ  
mobile_coupon 1 integer モバイルクーポンありフラグ  
pc_coupon 1 integer PCクーポンありフラグ  

サンプル

下記よりご確認ください。またAPIテストツールもご用意しています。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta charset="utf-8" />
<title>JSONPでレストラン検索APIの結果を取得するサンプルコード</title>
</head>
<body>
<input type="text" placeholder="enter your access key here" class="js--key"><input type="button" value="apply" class="js--apply" />
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script>

(function(){

  var url = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/?callback=?';
  var params = {
    keyid: '',
    format: 'json',
    latitude: 35.670083,
    longitude: 139.763267,
    range: 1
  };

  var showResult = function(result){
    if ( result.total_hit_count > 0 ) {
      var res = '';
      alert( result.total_hit_count + '件の結果が見つかりました。\n' );
      for ( var i in result.rest ){
          res += result.rest[i].id + ' ' + result.rest[i].name + ' ' + result.rest[i].access.line + ' ' + result.rest[i].access.station + ' ' + result.rest[i].access.walk + '分\n';
      }
      alert(res);
    } else {
      alert( '検索結果が見つかりませんでした。' );
    }
  }

  $(document).on('click', '.js--apply', function(){
    params.keyid = $('.js--key').val();
    $.getJSON(url, params, function(result){
      showResult(result);
    });
  });

})(jQuery);

</script>
</body>
</html>
                
<?php
/*****************************************************************************************
  ぐるなびWebサービスのレストラン検索APIで緯度経度検索を実行しパースするプログラム
  注意:緯度、経度、範囲の値は固定で入れています。
     アクセスキーはユーザ登録時に発行されたキーを指定してください。
*****************************************************************************************/

//エンドポイントのURIとフォーマットパラメータを変数に入れる
$uri   = "http://api.gnavi.co.jp/RestSearchAPI/20150630/";
//APIアクセスキーを変数に入れる
$acckey= "input your accesskey";
//返却値のフォーマットを変数に入れる
$format= "json";
//緯度・経度、範囲を変数に入れる
//緯度経度は日本測地系で日比谷シャンテのもの。範囲はrange=1で300m以内を指定している。
$lat   = 35.670083;
$lon   = 139.763267;
$range = 1;

//URL組み立て
$url  = sprintf("%s%s%s%s%s%s%s%s%s%s%s", $uri, "?format=", $format, "&keyid=", $acckey, "&latitude=", $lat,"&longitude=",$lon,"&range=",$range);
//API実行
$json = file_get_contents($url);
//取得した結果をオブジェクト化
$obj  = json_decode($json);

//結果をパース
//トータルヒット件数、店舗番号、店舗名、最寄の路線、最寄の駅、最寄駅から店までの時間、店舗の小業態を出力
foreach((array)$obj as $key => $val){
   if(strcmp($key, "total_hit_count" ) == 0 ){
       echo "total:".$val."\n";
   }

   if(strcmp($key, "rest") == 0){
       foreach((array)$val as $restArray){
            if(checkString($restArray->{'id'}))   echo $restArray->{'id'}."\t";
            if(checkString($restArray->{'name'})) echo $restArray->{'name'}."\t";
            if(checkString($restArray->{'access'}->{'line'}))    echo (string)$restArray->{'access'}->{'line'}."\t";
            if(checkString($restArray->{'access'}->{'station'})) echo (string)$restArray->{'access'}->{'station'}."\t";
            if(checkString($restArray->{'access'}->{'walk'}))    echo (string)$restArray->{'access'}->{'walk'}."分\t";

            foreach((array)$restArray->{'code'}->{'category_name_s'} as $v){
                if(checkString($v)) echo $v."\t";
            }
            echo "\n";
       }

   }
}

//文字列であるかをチェック
function checkString($input)
{

    if(isset($input) && is_string($input)) {
        return true;
    }else{
        return false;
    }

}
?>
                
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#*****************************************************************************************
# ぐるなびWebサービスのレストラン検索APIで緯度経度検索を実行しパースするプログラム
# 注意:ここでは緯度と経度の値は固定でいれています。
#    APIアクセスキーの値にはユーザ登録で取得したものを入れてください。
#*****************************************************************************************
import sys
import urllib
import json

####
# 変数の型が文字列かどうかチェック
####
def is_str( data = None ) :
  if isinstance( data, str ) or isinstance( data, unicode ) :
    return True
  else :
    return False

####
# 初期値設定
####
# APIアクセスキー
keyid     = "input your accesskey"
# エンドポイントURL
url       = "http://api.gnavi.co.jp/RestSearchAPI/20150630/"
# 緯度・経度、範囲を変数に入れる
# 緯度経度は日本測地系で日比谷シャンテのもの。範囲はrange=1で300m以内を指定している。
# 緯度
latitude  = "35.670083"
# 経度
longitude = "139.763267"
# 範囲
range     = "1"

####
# APIアクセス
####
# URLに続けて入れるパラメータを組立
query = [
  ( "format",    "json"    ),
  ( "keyid",     keyid     ),
  ( "latitude",  latitude  ),
  ( "longitude", longitude ),
  ( "range",     range     )
]
# URL生成
url += "?{0}".format( urllib.urlencode( query ) )
# API実行
try :
  result = urllib.urlopen( url ).read()
except ValueError :
  print u"APIアクセスに失敗しました。"
  sys.exit()

####
# 取得した結果を解析
####
data = json.loads( result )

# エラーの場合
if "error" in data :
  if "message" in data :
    print u"{0}".format( data["message"] )
  else :
    print u"データ取得に失敗しました。"
  sys.exit()

# ヒット件数取得
total_hit_count = None
if "total_hit_count" in data :
  total_hit_count = data["total_hit_count"]

# ヒット件数が0以下、または、ヒット件数がなかったら終了
if total_hit_count is None or total_hit_count <= 0 :
  print u"指定した内容ではヒットしませんでした。"
  sys.exit()

# レストランデータがなかったら終了
if not "rest" in data :
  print u"レストランデータが見つからなかったため終了します。"
  sys.exit()

# ヒット件数表示
print "{0}件ヒットしました。".format( total_hit_count )
print "----"

# 出力件数
disp_count = 0

# レストランデータ取得
for rest in data["rest"] :
  line                 = []
  id                   = ""
  name                 = ""
  access_line          = ""
  access_station       = ""
  access_walk          = ""
  code_category_name_s = []
  # 店舗番号
  if "id" in rest and is_str( rest["id"] ) :
    id = rest["id"]
  line.append( id )
  # 店舗名
  if "name" in rest and is_str( rest["name"] ) :
    name = u"{0}".format( rest["name"] )
  line.append( name )
  if "access" in rest :
    access = rest["access"]
    # 最寄の路線
    if "line" in access and is_str( access["line"] ) :
      access_line = u"{0}".format( access["line"] )
    # 最寄の駅
    if "station" in access and is_str( access["station"] ) :
      access_station = u"{0}".format( access["station"] )
    # 最寄駅から店までの時間
    if "walk"    in access and is_str( access["walk"] ) :
      access_walk = u"{0}分".format( access["walk"] )
  line.extend( [ access_line, access_station, access_walk ] )
  # 店舗の小業態
  if "code" in rest and "category_name_s" in rest["code"] :
    for category_name_s in rest["code"]["category_name_s"] :
      if is_str( category_name_s ) :
        code_category_name_s.append( u"{0}".format( category_name_s ) )
  line.extend( code_category_name_s )
  # タブ区切りで出力
  print "\t".join( line )
  disp_count += 1

# 出力件数を表示して終了
print "----"
print u"{0}件出力しました。".format( disp_count )
sys.exit()
                
package jp.javadrive;
import java.net.URL;
import java.net.HttpURLConnection;
import java.util.Iterator;
import com.fasterxml.jackson.databind.*;
/*******************************************************************************
 * ぐるなびWebサービスのレストラン検索APIで緯度経度検索を実行しパースするプログラム
 * 注意:緯度、経度、範囲は固定で入れています。
 *    アクセスキーはアカウント登録時に発行されたキーを指定してください。
 *      JsonをパースするためにライブラリにJacksonを追加しています。
 ******************************************************************************/
public class TestJavaRs {

  public static void main(String[] args) {
      // アクセスキー
        String acckey = "input your accesskey";
      // 緯度
      String lat = "35.670082";
      // 経度
      String lon = "139.763267";
      // 範囲
      String range = "1";
      // 返却形式
      String format = "json";
      // エンドポイント
      String gnaviRestUri = "http://api.gnavi.co.jp/RestSearchAPI/20150630/";
      String prmFormat = "?format=" + format;
      String prmKeyid = "&keyid=" + acckey;
      String prmLat = "&latitude=" + lat;
      String prmLon = "&longitude=" + lon;
      String prmRange = "&range=" + range;

      // URI組み立て
      StringBuffer uri = new StringBuffer();
      uri.append(gnaviRestUri);
      uri.append(prmFormat);
      uri.append(prmKeyid);
      uri.append(prmLat);
      uri.append(prmLon);
      uri.append(prmRange);

      // API実行、結果を取得し出力
      getNodeList(uri.toString());
  }

    private static void getNodeList(String url) {
        try {
            URL restSearch = new URL(url);
            HttpURLConnection http = (HttpURLConnection)restSearch.openConnection();
            http.setRequestMethod("GET");
            http.connect();
            //Jackson
            ObjectMapper mapper = new ObjectMapper();
            viewJsonNode(mapper.readTree(http.getInputStream()));

        } catch (Exception e){
          //TODO: 例外を考慮していません
        }
    }

    private static void viewJsonNode(JsonNode nodeList){
        if(nodeList != null){
            //トータルヒット件数
            String hitcount   = "total:" + nodeList.path("total_hit_count").asText();
            System.out.println(hitcount);
            //restのみ取得
            JsonNode restList = nodeList.path("rest");
            Iterator<JsonNode> rest = restList.iterator();
            //店舗番号、店舗名、最寄の路線、最寄の駅、最寄駅から店までの時間、店舗の小業態を出力
            while(rest.hasNext()){
              JsonNode r = rest.next();
              String id = r.path("id").asText();
              String name = r.path("name").asText();
              String line = r.path("access").path("line").asText();
              String station = r.path("access").path("station").asText();
              String walk    = r.path("access").path("walk").asText() + "分";
              String categorys = "";

              for(JsonNode n : r.path("code").path("category_name_s")){
                  categorys += n.asText();
              }
              System.out.println(id + "¥t" + name + "¥t" + line + "¥t" + station + "¥t" + walk + "¥t" + categorys);
           }
        }
    }
}
                

エラー仕様

パラメータ名
(タグ名)
出現回数 説明
gnavi 1 complexType ルートノード
@api_version - string APIのバージョン
  error 1 complexType エラー
  code 1 integer エラーコード(詳細は「エラーコード一覧」をご覧ください)
message 1 string エラーメッセージ

エラーコード一覧

エラーコード エラーメッセージ エラー内容
429 Too Many Access リクエスト回数上限超過
600 NoShop 指定された店舗の情報が存在しない。
601 Invalid Access 不正なアクセス(認証エラー)。
602 Invalid Shop Number 不正なぐるなび店舗IDパラメータが指定された。
603 InvalidType 不正なパラメータが指定された。
604 Internal Server Error 処理中にエラーが発生した。

サンプルエラーレスポンス

<gnavi api_version="20150630">
  <error>
    <code>603</code>
    <message>指定されたパラメーターは存在しません</message>
  </error>
</gnavi>
              

データを正しく返却できない際は、上記のようなエラーデータを返却します(返却形式がXMLの場合)。

さっそく「ぐるなび API」を使ってみる