質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

4回答

4034閲覧

ぐるナビapiで市町村コードを手に入れる方法

442ky119

総合スコア207

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/06/12 08:45

編集2022/01/12 10:55

グルナビのレストラン検索APIにはリクエスト時に指定可能なパラメータの中に「市町村コード」がないらしいですが、例えば東北だけののレストランの情報を知りたい場合はどうすればいいですか?

PHP

1<?php 2 3/** 4 * HTMLにテキストを出力する際は必ずこの関数を通す 5 */ 6function h($str) 7{ 8 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 9} 10 11// エンドポイントとパラメータを定義 12$endpoint = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/'; 13$params = [ 14 'keyid' => '私のid', 15 'format' => 'json', 16 'pref' => '04', 17]; 18 19// リクエスト実行 20$ch = curl_init(); 21curl_setopt_array($ch, [ 22 CURLOPT_URL => $endpoint . '?' . http_build_query($params, '', '&'), 23 CURLOPT_RETURNTRANSFER => true, // レスポンスボディを返り値として取得 24 CURLOPT_FAILONERROR => true, // HTTPステータス400以上はエラーと見なす 25 CURLOPT_ENCODING => 'gzip', // 通信を圧縮する 26]); 27$response = curl_exec($ch); 28 29// エラーのときはテキストとしてエラーメッセージを出して終了 30if ($response === false) { 31 header('Content-Type: text/plain; charset=UTF-8', true, 500); 32 exit(curl_error($ch)); 33} 34 35// API側がクソ実装してなければこのjson_decodeは必ず成功するはず 36$obj = json_decode($response); 37 38// HTMLとして表示 39header('Content-Type: text/html; charset=UTF-8'); 40 41?> 42<!DOCTYPE html> 43<title>Example</title> 44<?php foreach ($obj->rest as $r): ?> 45<table border="1"> 46 <caption><?=h($r->name)?></caption> 47 <tr> 48 <th>店舗名</th> 49 <td><?=h($r->name)?></td> 50 </tr> 51 <tr> 52 <th>アクセス</th> 53 <td><?=h($r->access->line)?><?=h($r->access->station)?>から<?=h($r->access->walk)?></td> 54 </tr> 55</table> 56<?php endforeach; ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

もう1度だけうるさいことを。

https://teratail.com/questions/37226 で書いた回答の意味をよく考えてみてください。
これからもこのまま結局他人の善意に頼ってコーディングしてもらったものを微修正して「自分のもの」を作り上げるのですか。

今やろうとしていることに対して、致命的にそれ以前の知識が不足しています。
仮にこのまま、なんらかご希望の動作をするものができたとしても、なぜそれがそのように動作するのかわからないままになりますよ。

投稿2016/06/12 12:03

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

442ky119

2016/06/12 12:18

いや、全く他人に頼っているわけではありません。 自分のサイトにあうように加工したりします。 言い訳をさせて下さい。ぐるなびapiについてのサイトが無いので困っているんです。ぐるなびapiについての基本操作がわかるサイトがわかれば嬉しいです。
kaz.Suenaga

2016/06/12 12:22

> ぐるなびapiについてのサイトが無いので困っているんです。ぐるなびapiについての基本操作がわかるサイトがわかれば嬉しいです。 だから、致命的にそれ以前の知識が不足している、といっているんです。 リファレンス http://api.gnavi.co.jp/api/manual/ に必要な情報がすべてあるんですよ。 今質問者さんに足りないのは、そもそもAPIというものがどう扱うものなのか、という知識であり、それ以前にJavaScriptなどでAPIにアクセスしてデータを取得しHTMLに反映する、ということがどういうことなのか、ということについての知識です。 もう1度、前の回答を読んでみてください。 わかったつもりにならず、順を追って、説明できるくらいに理解してみてください。 そうすれば、リファレンスに全てが書かれていることがわかると思います。
442ky119

2016/06/12 12:40

だから、yahooapiと色々と違うので色々と困っているんです。 ぼくも全く学んでいないというわけではありません。 それにJavaScriptなどでAPIにアクセスしてデータを取得しHTMLに反映する、ということがどういうことと書かれていますが僕はjavascriptを扱っていません。phpです。
kaz.Suenaga

2016/06/12 12:49 編集

> だから、yahooapiと色々と違うので色々と困っているんです。 はい、それはそうでしょう。 ただ、本質的には同じことをやっています。 APIのエンドポイントに対して、任意のパラメータを付与してアクセスし、XMLまたはJSON・JSONPといった形式でレスポンスを取得し、それを任意の箇所に書き出す、という処理です。 その、同じことをやっている、ということを理解できるために「それ以前に知らないといけないこと」がありますよ、と言っています。 ああ、PHPでしたね。 でも同じことで、上記の処理をPHPで書くかJavaScriptで書くかの違いでしかありません。 PHPでAPIを利用する、ということをまず理解してみてください。 たとえばXMLやJSONをPHPで扱う、ということを、理解していますか。
442ky119

2016/06/12 12:54

はい、大丈夫です。
kaz.Suenaga

2016/06/12 13:06

大丈夫というのは、XMLやJSONの扱いをわかっているということですね。 では、 APIのエンドポイントに対して、任意のパラメータを付与してアクセスし、XMLまたはJSON・JSONPといった形式でレスポンスを取得し、それを任意の箇所に書き出す、という処理です。 という意味も理解できるということでしょう。 だとしたら、リファレンスを見てエンドポイントへ適切なパラメータをつけてアクセスすれば、レスポンスを受け取れるはずです。 だとしたら、エンドポイントへのパラメータの付与方法について、もしくはレスポンスの解釈方法についてのご質問になるはずです。 そう言った具体的なご質問につながっていないので、上記のようなうるさいことを書きました。 しかし質問者さんが、自分はわかっている、というのであれば勘違いでしたね。 すみません。
442ky119

2016/06/12 14:31

説明不足ですみません、レスポンスフィールドについての知識が余りないんです。
guest

0

リファレンスも読まずにプログラミングをするなんて不可能では?
http://api.gnavi.co.jp/api/manual/

RTFM

投稿2016/06/12 09:09

編集2016/06/12 09:16
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ぐるナビのサンプルコードはいろいろと修正すべき点が多いので,「受付中 <tr><td>の表にしたい」で私が書いた回答をベースにいろいろ書き換えてみてください.**ぐるなび Web Service - レストラン検索API**を見ればリクエストパラメータに関してもレスポンスフィールドに関しての情報も両方手に入ります.但し,もしJSONで取り扱う場合は少し応用が必要です.

  • リクエストパラメータに関しては,書いてある通りです.エリア指定は「area」「pref」「areacode_l」「areacode_m」「areacode_s」の5つです.下に行くほど区分が小さくなり,市町村レベルの指定は下3つでできるかと思います.エリアコードの取得方法も書いてある通りです.各エリアコード取得用エンドポイントに「keyid」「format」のみ指定して送ってください.

  • レスポンスパラメータに関しては,XMLを基準に書いてあるのでJSONを取り扱う場合は少し読み替えが必要です.てっとり早いのはvar_dumpしてみて構造を眺めることですが,**「出現回数が複数になっているものは配列になる」**という法則があるようで,これに従えばvar_dumpの確認無しでもコードを書けます.

エリアコード取得用エンドポイントの利用ですが,一目確認したいだけならわざわざコードを書く必要すらありません.**APIテストツール**で簡単に確認を行えます.ただしJSONがそのままでは読みにくいので,ターミナルからワンライナーのPHPコードを利用すると便利です.例えばMacならクリップボードを標準出力に流すpbpasteコマンドを使えますが,あらかじめAPIテストツールが取得したJSONデータをコピーしておいたうえで

bash

1php -r 'var_dump(json_decode(`pbpaste`);'

を実行すると見やすく表示されます.

イメージ説明

例えばこれを見れば,東北のエリアコードはAREA160であるとわかります.PHPでアクセスするなら

php

1$json->area[1]->area_code

でいいこともわかりますね.別の方法として,インストールが必要ですが jsonpp uni2ascii パッケージを利用するという手段もあります.

bash

1pbpaste | jsonpp | ascii2uni -a U -q

イメージ説明

投稿2016/06/13 00:21

編集2016/06/13 00:39
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

442ky119

2016/06/13 00:46

jsonは難しいですか? 初めて使うので不安です。 また、応用が必要だと書いてありますがどういう応用が必要ですか?
mpyw

2016/06/13 00:55

回答本当に全部読まれましたか?落ち着いてください… 応用は「XML基準で書かれた内容の読み替え」と「見やすく表示する方法」です.書いたとおりです.
mpyw

2016/06/13 00:58

JSONについて無知であれば,ここを一読してください. http://dev.classmethod.jp/etc/concrete-example-of-json/ 注意すべき点は,JavaScriptによるJSONに対する「変数.要素名」でのアクセスはPHPでは「$変数->要素名」として表現されることです.配列に関してはどちらも「$変数[オフセット番号]」です.
442ky119

2016/06/13 01:22

ありがとうございます。丁寧に説明してありがとうございます。 またわからなくなったら、質問します。
guest

0

http://api.gnavi.co.jp/api/manual/ のエリアマスタAPI などで取得できます。

投稿2016/06/12 09:10

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

442ky119

2016/06/12 09:24

このエリアマスタは普通の市町村コードを使えばいいのですか?
CHERRY

2016/06/12 10:47

おまけ 都道府県単位で検索したいのであれば、レストラン検索API ( http://api.gnavi.co.jp/api/manual/restsearch/ ) で、リクエストパラメータ として、pref=都道府県コードを指定すると 指定した都道府県で、検索できます。 都道府県コードは、都道府県マスタAPI ( http://api.gnavi.co.jp/api/manual/prefmaster/ ) で、取得できます。(サンプルコードを実行したら、分かるはずです。)
CHERRY

2016/06/12 10:49

おまけ2 ぐるなび API の場合、API テストツールがありますので、ここで、条件を選択すると URL欄に 結果を検索できる URL が作れます。(URLの IDを自分のIDに置き換えて使います。) http://api.gnavi.co.jp/api/tools/?apitype=ver1_PhotoSearch
442ky119

2016/06/12 11:56

ありがとうございます。 やってみます。 わからなくなったらまた連絡します。
442ky119

2016/06/13 03:38

コードのように書きましたが宮城県の店舗情報が手に入りません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問