2008/08/24

[coldfusion][ぐるなび]お店情報の取得

ぐるなびのwebサービスを使った解説も最後かもしれない。

今回は、お店の情報を取得する方法について

<cfparam name="requrl"
default="http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=取得したAPIキー">
<cfparam name="hit_per_page" default=500>
<cfparam name="ret" default="">
<cfset store="和民">
<cfset requrl = requrl&"&hit_per_page="&hit_per_page>
<cfset requrl = requrl&"&name="&URLEncodedFormat(store,"utf-8")>

<cfhttp url="#requrl#" method="get"/>
<cfoutput>var data ="";</cfoutput>

<!--- xmlの解析 --->
<cfset ret = XmlParse(cfhttp.fileContent)>

<!--- 問合わせがエラーを返した場合 --->
<cfif XmlChildPos(ret,"gnavi",1) neq -1>

  <!--- コードの値を取得 --->
  <cfset retCode = ret.gnavi.error.code.xmlText>
  <cfoutput>
  <!--- コードが600の場合、呼び出し元に検索結果(0件)を返す --->
  <cfif retCode eq "600">
    data = {"error":null,"total":0};
  <!--- エラーコードを返す --->
  <cfelse>
    data = {"error":"#ret.gnavi.error.code.xmlText#"};
  </cfif>
  </cfoutput>

<!--- 問合わせ結果が、正常な場合 --->
<cfelse>
  <!--- 検索結果の合計数 --->
  <cfset TotalCnt = ret.response.total_hit_count.XmlText>
  
  <!--- responseタグまで取得 --->
  <cfset Response = ret.response>

  <!--- JSON形式でリターン --->
  <cfoutput>
    date = {
     "error":null
    <!--- 検索結果の合計数 --->
     , "total":#totalCnt#
    <cfloop index="i" from="1" to="#totalCnt#">
      <cfset Ret_rest = Response.rest[i]>
     , #i#:{
      <!--- 店舗ID --->
     "id":"#Ret_rest.id.XmlText#"
      <!--- 店舗名 --->
     , "name":"#Ret_rest.name.XmlText#"
      <!--- PCサイトURL --->
     , "url":"#Ret_rest.url.XmlText#"
      <!--- 店舗画像画像1がある場合 --->
      <cfif Ret_rest.image_url.shop_image1.XmlText neq "">
        <!--- 店舗画像画像1のURL --->
     , "shop_image1":"#Ret_rest.image_url.shop_image1.XmlText#"
      <!--- 店舗画像画像1がない場合 --->
      <cfelse>
     , "shop_image1":null
      </cfif>
      <!--- 店舗画像画像2がある場合 --->
      <cfif Ret_rest.image_url.shop_image2.XmlText neq "">
        <!--- 店舗画像画像2のURL --->
     , "shop_image2":"#Ret_rest.image_url.shop_image2.XmlText#"
      <!--- 店舗画像画像2がない場合 --->
      <cfelse>
     , "shop_image2":null
      </cfif>
      <!--- QRコード画像のURLがある場合 --->
      <cfif Ret_rest.image_url.qrcode.XmlText neq "">
        <!--- QRコード画像のURL --->
     , "qrcode":"#Ret_rest.image_url.qrcode.XmlText#"
      <!--- QRコード画像のURLがない場合 --->
      <cfelse>
     , "qrcode":null
      </cfif>
        <!--- 住所 --->
     , "address":"#Ret_rest.address.XmlText#"
        <!--- 電話番号 --->
     , "tel":"#Ret_rest.tel.XmlText#"
        <!--- 緯度(度分秒十進数) --->
     , "latitude":#Ret_rest.latitude.XmlText#
        <!--- 経度(度分秒十進数) --->
     , "longitude":#Ret_rest.longitude.XmlText#
     }
    </cfloop>
    };
  </cfoutput>
</cfif>

全部ではないのですが、JSON形式でお店の情報を返すようにしました。
返り値に、経度と緯度も追加しました。

evalをかけたあと、これを使ってgoogle mapで表示するのもいいかなと思い。

今回キーとなったのは、エラーがおきたときのタグの構成がちょい違うところ。
なので、でかいif文で、エラーかどうか確認しないといけないんですよねー。

とりあえず形になったと思います。

時間があったら、coldfusionを使ったJSON形式で返すプログラムを公開しよっかなー。

0 コメント:

コメントを投稿