多言語版レストラン検索API


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

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

リクエストパラメータ

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

パラメータ名 必須 説明 備考
keyid string アクセスキー ぐるなびより提供されたアクセスキー
id   string 店舗ID 「,」区切りで店舗IDを複数検索可能(10個まで)
format   string レスポンス形式 xmlまたはjson(callback関数指定時にJSONP形式で出力)
callback   string コールバック関数 formatが「json」の場合のみ
lang   string 返却言語 ja: 日本語, zh_cn: 中国語 (簡体字), zh_tw: 中国語 (繁体字), ko: 韓国語, en: 英語
name   string 店舗名 UTF-8でURLエンコードすること
name_kana   string 店舗名読み カタカナで指定
UTF-8でURLエンコードすること
lang=jaの場合のみ指定可能
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:1,000m, 4:2,000m, 5:3,000m
(デフォルト: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検索)
freeword_condition   integer フリーワード検索条件タイプ フリーワード検索の条件を指定
1: AND検索, 2: OR検索 (デフォルト: AND検索)
english_speaking_staff integer英語が話せるスタッフがいる0:絞込みなし(デフォルト)、1:絞り込みあり
english_menu integer英語メニューあり0:絞込みなし(デフォルト)、1:絞り込みあり
korean_speaking_staff integer韓国語が話せるスタッフがいる0:絞込みなし(デフォルト)、1:絞り込みあり
korean_menu integer韓国語メニューあり0:絞込みなし(デフォルト)、1:絞り込みあり
chinese_speaking_staff integer中国語が話せるスタッフがいる0:絞込みなし(デフォルト)、1:絞り込みあり
simplified_chinese_menu integer中国語(簡体字)メニューあり0:絞込みなし(デフォルト)、1:絞り込みあり
traditional_chinese_menu integer中国語(繁体字)メニューあり0:絞込みなし(デフォルト)、1:絞り込みあり
vegetarian_menu_options integerベジタリアンメニュー相談可0:絞込みなし(デフォルト)、1:絞り込みあり
religious_menu_options integer国・宗教別メニュー相談可0:絞込みなし(デフォルト)、1:絞り込みあり
wifi integerwifi利用可0:絞込みなし(デフォルト)、1:絞り込みあり
card integerカード利用可0:絞込みなし(デフォルト)、1:絞り込みあり
private_room integer個室あり0:絞込みなし(デフォルト)、1:絞り込みあり
no_smoking 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 complexType レストラン情報  
name 1 string    
name_sub 1 string 店舗名称 (日本語表記) lang=ja以外で返却
name_kana 1 string 店舗名称 (カタカナ) lang=jaのみ返却
business_hour 1 string 営業時間  
holiday 1 string 休業日  
contacts 1 complexType コンタクト  
address 1 string 住所  
tel 1 string 電話番号  
fax 1 string FAX番号  
sales_points 1 complexType    
  pr_short 1 string PR文 (短: 最大50文字)  
pr_long 1 string PR文 (長: 最大200文字)  
access 1 string アクセス  
budget 1 string 平均予算  
credit_card 1 string クレジットカード名称  
categories 1 complexType    
category 1 string フリーワードカテゴリー lang=jaのみ返却
category_name_l 複数回 string 大業態名称  
  @order - number オーダー レコード番号
category_name_s 複数回 string 小業態名称  
  @order - number オーダー レコード番号
flags 1 complexType フラグ類  
  mobile_site 1 integer モバイルサイトありフラグ  
mobile_coupon 1 integer モバイルクーポンありフラグ  
pc_coupon 1 integer PCクーポンありフラグ  
location 1 complexType    
  latitude 1 number 緯度 度分秒十進数
longitude 1 number 経度 度分秒十進数
latitude_wgs84 1 number 緯度(世界測地系) 世界測地系緯度
longitude_wgs84 1 number 経度(世界測地系) 世界測地系経度
area 1 complexType    
  district 1 string 地域  
prefname 1 string 都道府県名
areaname_l 1 string エリアL名 lang=ja以外で返却
areaname_m 1 string エリアM名 lang=ja以外で返却
areaname_s 1 string エリアS名  
url 1 string PCサイトURL  
url_mobile 1 string モバイルサイトURL lang=jaのみ返却
image_url 1 complexType    
  thumbnail 1 string サムネイル画像URL ※1
qrcode 1 string QRコード画像URL lang=jaのみ返却

※1 返却値のgパラメータの指定値変更により画像サイズの変更が可能。
g=80 :縦横最大80x80(px)
g=157 :縦横最大157x157(px)
gパラメータなし:縦横最大240x240(px)

サンプル

下記よりご確認ください。また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/ForeignRestSearchAPI/20150630/?callback=?';
  var params = {
    keyid: '',
    format: 'json',
    latitude: 35.670083,
    longitude: 139.763267,
    range: 1,
    lang: 'en'
  };

  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.name + " " + result.rest[i].access + "\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/ForeignRestSearchAPI/20150630/";
//APIアクセスキーを変数に入れる
$acckey= "input your accesskey";
//返却値のフォーマットを変数に入れる
$format= "json";
//緯度・経度、範囲を変数に入れる
//緯度経度は日本測地系で日比谷シャンテのもの。範囲はrange=1で300m以内を指定している。
$lat   = 35.670083;
$lon   = 139.763267;
$range = 1;
$lang  = "en";

//URI組み立て
$url  = sprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s", $uri, "?format=", $format, "&keyid=", $acckey, "&latitude=", $lat,"&longitude=",$lon,"&range=",$range,"&lang=",$lang);
//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'}->{'name'})) echo (string)$restArray->{'name'}->{'name'}."\t";
            if(checkString($restArray->{'access'}))    echo (string)$restArray->{'access'}."\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/ForeignRestSearchAPI/20150630/"
# 緯度・経度、範囲を変数に入れる
# 緯度経度は日本測地系で日比谷シャンテのもの。範囲はrange=1で300m以内を指定している。
# 緯度
latitude  = "35.670083"
# 経度
longitude = "139.763267"
# 範囲
range     = "1"

####
# APIアクセス
####
# URLに続けて入れるパラメータを組立
query = [
  ( "format",    "json"    ),
  ( "keyid",     keyid     ),
  ( "lang",      "en"      ),
  ( "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               = ""

  # 店舗番号
  if "id" in rest and is_str( rest["id"] ) :
    id = rest["id"]
  line.append( id )

  if "name" in rest :
    name = rest["name"]
    # 最寄の路線
    if "name" in name and is_str( name["name"] ) :
      name = u"{0}".format( name["name"] )
    line.append( name )
  # アクセス情報
  if "access" in rest and is_str( rest["access"] ) :
    access = u"{0}".format( rest["access"] )
  line.append( access )

  # タブ区切りで出力
  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 TestJavaFo {

  public static void main(String[] args) {

         //アクセスキー
         String acckey = "input your accesskey";
       //緯度
       String lat = "35.670082";
       //経度
       String lon = "139.763267";
       //範囲
       String range = "1";
       //返却値言語
       String lang  = "en";
       //返却形式
         String format = "json";
         //エンドポイント
       String gnaviRestUri = "http://api.gnavi.co.jp/ForeignRestSearchAPI/20150630/";
       String prmFormat = "?format=" + format;
       String prmKeyid = "&keyid=" + acckey;
       String prmLat = "&latitude=" + lat;
       String prmLon = "&longitude=" + lon;
       String prmRange = "&range=" + range;
       String prmLang  = "&lang=" + lang;
       //URI組み立て
       StringBuffer uri = new StringBuffer();
       uri.append(gnaviRestUri);
       uri.append(prmFormat);
       uri.append(prmKeyid);
       uri.append(prmLat);
       uri.append(prmLon);
       uri.append(prmRange);
       uri.append(prmLang);

       //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();
         // 店舗ID, 店舗名、アクセスを表示
         while(rest.hasNext()){
               JsonNode r = rest.next();
               String id     = r.path("id").asText();
                   String name   = r.path("name").path("name").asText();
                   String access = r.path("access").asText();
                   System.out.println(id + "¥t" + name + "¥t" + access);

         }
       }
     }
}
                

エラー仕様

パラメータ名
(タグ名)
出現回数 説明
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」を使ってみる