目次
サンプル・プログラム:実行例
サンプル・プログラム
| searchCafeHotpepper.php | サンプル・プログラム本体 |
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.2.0 | 2026/01/11 | PHP8.5対応:double→float |
| 1.1.0 | 2025/08/13 | .pahooEnv導入 |
| 1.0 | 2022/01/10 | 初版 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 6.9.1 | 2025/11/25 | PHP8.5対応:double→float |
| 6.9.0 | 2025/09/21 | jsPolygon, jsPolygon_Gmap, jsPolygon_Leaflet, loadGeoJSON, getPrefBorderList を追加 |
| 6.8.0 | 2025/08/10 | アクセスキーなどを ".pahooEnd" に分離 |
| 6.7.1 | 2025/07/26 | jsLine_Gmap() - bug-fix |
| 6.7.0 | 2025/07/20 | drawJSmap,drawGMap -- 引数 $markerLevel 追加 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
準備:PHP の https対応
Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順
これで準備は完了だ。
準備:pahooInputData 関数群
また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
準備:pahooGeoCode クラス
pahooGeoCode.php
41: class pahooGeoCode {
42: public $items; // 検索結果格納用
43: public $error; // エラー・フラグ
44: public $errmsg; // エラー・メッセージ
45: public $hits; // 検索ヒット件数
46: public $webapi; // 直前に呼び出したWebAPI URL
47:
48: // 都道府県境界線データ
49: // SimpleMaps.com is a product of Pareto Software, LLC. © 2010-2025
50: // https://simplemaps.com/gis/country/jp
51: // ※各自の環境に合わせて設定すること
52: public $GeoJsonJP = __DIR__ . '/jp.json';
53:
54: // -- 以下のデータは .env ファイルに記述可能
55: // Google Cloud Platform APIキー
56: // https://cloud.google.com/maps-platform/
57: // ※Google Maps APIを利用しないのなら登録不要
58: public $GOOGLE_API_KEY_1 = ''; // HTTPリファラ用
59: public $GOOGLE_API_KEY_2 = ''; // IP制限用
60: public $GOOGLE_MAP_ID = ''; // GoogleMaps ID
61:
62: // Yahoo! JAPAN Webサービス アプリケーションID
63: // https://e.developer.yahoo.co.jp/register
64: // ※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
65: public $YAHOO_APPLICATION_ID = '';
66:
67: // OSM Nominatim Search API利用時に知らせるメールアドレス
68: // https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
69: // ※OSM Nominatim Search APIを利用しないのなら登録不要
70: public $NOMINATIM_EMAIL = '';
71:
72: // IP2Location.io APIキー
73: // https://www.ip2location.io/
74: // ※IP2Location.ioを利用しないのなら登録不要
75: public $IP2LOCATION_API_KEY = '';
地図や住所検索として Google を利用するのであれば Google Cloud Platform APIキー とマップID が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、IP2Location.ioを利用するのであれば「PHPでIPアドレスやホスト名から住所を求める」を、それぞれ参照されたい。
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
準備:地図サービス(WebAPI)の選択
searchCafeHotpepper.php
65: // 地図描画サービスの選択
66: // 0:Google
67: // 2:地理院地図・OSM
68: define('MAPSERVICE', 0);
69:
70: // 住所検索サービスの選択
71: // 0:Google
72: // 1:Yahoo!JAPAN
73: // 11:HeartRails Geo API
74: // 12:OSM Nominatim Search API
75: define('GEOSERVICE', 1);
76:
77: // 逆ジオコーディングサービスの選択
78: // 0:Google
79: // 1:Yahoo!JAPAN
80: // 11:HeartRails Geo API
81: // 21:簡易ジオコーディングサービス
82: define('REVGEOSERVICE', 21);
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo API、OSM Nominatim Search API から選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
逆ジオコーディングサービスは、Google、Yahoo!JAPAN、HeartRails Geo API、簡易ジオコーディングサービスから選べる。あらかじめ、定数 REVGEOSERVICE に値を設定すること。
ホットペッパー グルメサーチAPI
| URL |
|---|
| https://webservice.recruit.co.jp/hotpepper/gourmet/v1/ |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| key | 必須 | APIキー |
| lat | 必須 | 緯度 |
| lng | 必須 | 経度 |
| range | 必須 | 検索範囲 1: 300m 2: 500m 3: 1000m (初期値) 4: 2000m 5: 3000m |
| datum | 任意 | world: 世界測地系、tokyo: 旧日本測地系。初期値は world。 |
| genre | 任意 | お店ジャンルコード。本プログラムでは定数HOTPEPPER_GENREで指定。 |
| count | 任意 | 検索結果の最大出力データ数を指定します。初期値:10、宰相:1、最大100。 |
| format | 任意 | レスポンス形式。初期値:xml。xml または json または jsonp。 |
解説:喫茶店を検索
searchCafeHotpepper.php
197: /**
198: * グルメサーチAPIのURLを取得する
199: * @param float $latitude 緯度(世界測地系)
200: * @param float $longitude 経度(世界測地系)
201: * @param float $distance 範囲(メートル)
202: * @param string $genre ジャンルID
203: * @return string URL グルメサーチAPIのURL
204: */
205: function getURL_GourmetSearchAPI($latitude, $longitude, $distance, $genre) {
206: $range_tbl = array(1=>300, 2=>500, 3=>1000, 4=>2000, 5=>3000);
207:
208: $apikey = HOTPEPPER_ACCESSKEY;
209: $counts = HOTPEPPER_COUNTS;
210: $range = count($range_tbl);
211: foreach ($range_tbl as $key=>$val) {
212: if ($distance <= $val) {
213: $range = $key;
214: break;
215: }
216: }
217:
218: $url = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key={$apikey}&&lat={$latitude}&lng={$longitude}&range={$range}&genre={$genre}&datum=world&count={$counts}&format=json";
219:
220: return $url;
221: }
searchCafeHotpepper.php
223: /**
224: * グルメサーチAPIを利用して指定座標の近くにある喫茶店を検索
225: * @param float $latitude 緯度(世界測地系)
226: * @param float $longitude 経度(世界測地系)
227: * @param float $distance 範囲(メートル)
228: * @param array $items 情報を格納する配列
229: * @return array(ヒットした施設数, メッセージ, APIのURL)
230: */
231: function searchCafe($latitude, $longitude, $distance, &$items) {
232: $msg = '';
233: $url = getURL_GourmetSearchAPI($latitude, $longitude, $distance, HOTPEPPER_GENRE);
234: $data = @file_get_contents($url);
235: $json = json_decode($data);
236:
237: // レスポンス・チェック
238: if (($data == FALSE) || ($json == NULL)) {
239: if (isset($json->results->results_available) && ((int)($json->results->results_available) <= 0)) {
240: $msg = '検索範囲に店舗が無いか,ホットペッパーAPIのエラーです';
241: }
242: return array(FALSE, $msg, $url);
243: }
244:
245: // 応答解釈
246: $n = 1;
247: foreach ($json->results->shop as $element) {
248: $items[$n]['id'] = num2alpha($n);
249: $items[$n]['title'] = (string)$element->name;
250: $items[$n]['url'] = (string)$element->urls->pc;
251: $items[$n]['category'] = (string)$element->genre->catch;
252: $items[$n]['open'] = (string)$element->open;
253: $items[$n]['close'] = (string)$element->close;
254: $items[$n]['address'] = (string)$element->address;
255: $items[$n]['image'] = (string)$element->photo->pc->l;
256: $items[$n]['latitude'] = (float)$element->lat;
257: $items[$n]['longitude'] = (float)$element->lng;
258: $items[$n]['description'] =<<< EOT
259: <span class="small"><a href="{$items[$n]['url']}" target="_blank">{$items[$n]['title']}</a><br />{$items[$n]['address']}<br />営業時間:{$items[$n]['open']}/定休日:{$items[$n]['close']}<br /><img src="{$items[$n]['image']}" /></span>
260: EOT;
261: $n++;
262: }
263:
264: return array($n, '', $url);
265: }
その他のプログラムの流れは、「PHPで電源・WiFi利用可能店舗を検索する」とほぼ同じである。
参考サイト
- グルメサーチAPI:ホットペッパー:リクルート
- PHPでGoogleを利用して住所から緯度・経度を求める:ぱふぅ家のホームページ
- PHPで電源・WiFi利用可能店舗を検索する:ぱふぅ家のホームページ

(2026年1月11日) PHP8.5対応:double→float
(2025年8月13日).pahooEnv導入
(2025年6月14日)GoogleMaps JavaScript APIの変更に対応した.