【Yelpに掲載されているデータを取得する】YelpのSearch APIを使ってお店データを取得する方法

Yelpってご存知ですか。

YelpはYelp, Inc.が運営するローカルビジネスレビューサイトである。

Yelpは2013年1月現在、一か月あたり1億人以上のユニークビジター(英語版)を抱えており、前年の7100万人から増加している

Wikipediaより

世界最大級の口コミローカルサイトとして海外ではとても有名ですね。・・・最近では、日本でもYelpのイベントが開催されたりと、徐々に自分の周囲では名前を聞くようになってきた印象があります。そのYelpなんですが、APIが提供されているのを先日知ったので試しました。

以下に流れを書きましたので、機会がありましたらご参考ください。

前準備:Yelpのアカウントにログインしてキーなどをメモしておく

それでは早速~。「Yelp for Developers」にアクセスして、Yelpのアカウントにログインします。(アカウントを持っていない方は、同ページの右上部にある「sign up」で作成手続きが行えます。)

ログインをした方のみ「Manage API access」の項目が表示されますのでクリックします。すると、以下の4つの情報が表示されます。

  1. Consumer Key
  2. Consumer Secret
  3. Token
  4. Token Secret

この4つの情報は後で使うので控えておきます。

というわけで前準備完了です。次はコードを書きましょう~。

サンプルコードをダウンロードする

ありがたいことに、サンプルコードが「Code Samples」で配布されています。いくつかの言語がありますが、今回はPHPでやります。

https://github.com/Yelp/yelp-api」にアクセス。zipファイルをダウンロード、解凍して「yelp-api-master/v2/php」配下にある「sample.php」をテキストエディターなどで開きます。

控えていた情報を入れよう

以下のコードは「sample.php」の25~31行を抜粋しています。

// Set your OAuth credentials here 
// These credentials can be obtained from the 'Manage API Access' page in the
// developers documentation (http://www.yelp.com/developers)
$CONSUMER_KEY = NULL;
$CONSUMER_SECRET = NULL;
$TOKEN = NULL;
$TOKEN_SECRET = NULL;

コード内にある「NULL」になっている箇所に、先ほど控えておいたYelpから発行された4つの値をそれぞれ入力します。

  1. Consumer Key
  2. Consumer Secret
  3. Token
  4. Token Secret

ですね。

「$CONSUMER_KEY」には「Consumer Key」の値を入れる

といった調子で名称が対応しているので、それほど迷うことなく入力できるとは思います。

サンフランシスコでディナーができるお店データを取得

続けて、「sample.php」の34~41行目に注目します。

$API_HOST = 'api.yelp.com';
$DEFAULT_TERM = 'dinner'; //ディナー
$DEFAULT_LOCATION = 'San Francisco, CA'; //サンフランシスコ,カリフォルニア
$SEARCH_LIMIT = 3; //取得件数の上限
$SEARCH_PATH = '/v2/search/';
$BUSINESS_PATH = '/v2/business/';

サンプルコードでは上記のように、カリフォルニア,サンフランシスコでディナーができるお店を条件にして検索しています。

ここはひとまずそのままにして「sample.php」を実行しましょう。すると、下のように条件に合った1件目のデータが表示されます。

サンプルコードを実行すると、1件目のデータが表示される

Rickybobby」というお店データが表示されます。

{"is_claimed": false, "rating": 4.0, "mobile_url": "http://m.yelp.com/biz/rickybobby-san-francisco", "rating_img_url": "http://s3-media4.fl.yelpcdn.com/assets/2/www/img/c2f3dd9799a5/ico/stars/v1/stars_4.png", "review_count": 378, "name": "Rickybobby", "snippet_image_url": "http://s3-media4.fl.yelpcdn.com/photo/Nk3O-6EP3tgl9F3e-r1Gug/ms.jpg", "rating_img_url_small": "http://s3-media4.fl.yelpcdn.com/assets/2/www/img/f62a5be2f902/ico/stars/v1/stars_small_4.png", "url": "http://www.yelp.com/biz/rickybobby-san-francisco", "reviews・・・省略

評価数やレビュー数、お店の画像データなどなど、取得できましたね。

日本のお店データも取得しよう

今度は日本のお店データを取得します。ここで、先ほども出た「$DEFAULT_LOCATION」の値を変更します。例えば・・・「東京都北区の東十条」を指定します。

$DEFAULT_LOCATION = 'San Francisco, CA';
↓変更
$DEFAULT_LOCATION = 'Higashijujo, kita-ku, Tokyo, JP'; //東京都北区、東十条を指定

変更して「sample.php」を実行すると、以下のデータが表示されます。「シターラ ダイナー」というお店データです。

{"is_claimed": false, "rating": 3.0, "mobile_url": "http://m.yelp.co.jp/biz/sitaara-diner-%E5%8C%97%E5%8C%BA-2", "rating_img_url": "http://s3-media3.fl.yelpcdn.com/assets/2/www/img/34bc8086841c/ico/stars/v1/stars_3.png", "review_count": 1, "name": "Sitaara diner", "rating_img_url_small": "http://s3-media3.fl.yelpcdn.com/assets/2/www/img/902abeed0983/ico/stars/v1/stars_small_3.png", "url": "http://www.yelp.co.jp/biz/sitaara-diner-%E5%8C%97%E5%8C%BA-2", "reviews": [{"rating": 3, "excerpt": "\u6771\u4eac\u306e・・・省略

あと、郵便番号も指定できます。東十条なら、「1140001(ハイフンは入れない)」とか。個人的には、郵便番号を検索条件に入れるといい感じで近隣のお店データを取得できました。

URLはエンコードしよう

ここで一点注意ですが、ビジネスIDの取得はできるんですが、肝心のお店データが取得できず「Signature was invalid」と表示されてしまう場合があります。ここで、ビジネスIDをURLエンコードしてあげます。

$response = get_business($business_id);
↓変更
$response = get_business(urlencode($business_id));

基本的な事だけど、気が付かないとずっとはまってしまうところ・・・重要ですね!

カスタマイズしよう

サンプルコードでは、あえて1件だけ表示させている処理になっているので、お好みでカスタマイズすればいいですね。

また、条件はいろいろ指定できます。緯度・経度とかも。詳しくはsearch_apiのドキュメント(英文)をご参考ください。APIが使えると、今運営しているサイトに新しい要素を入れちゃおうとか、「YelpのAPI使って近所のお店紹介しようぜ~」とか、他にもいろいろ思いつくことができました。さっそく実装してみよう!

著者:bouya Imamura