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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

2回答

4890閲覧

<tr><td>の表にしたい

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:35

今、グルナビのレストラン検索apiを使っています。
初めての利用で色々と困っています。
一つがapiで入手したデータをウェブで表示する際のことです。

<tr><td>を使えば情報を綺麗に表示することは可能なのは知っていますが下記のコードのレスポンスフィールドforeach((array)$obj as $key => $val){・・・以下を<tr><td>の中に収めるにはどう書けばいいですか? <tr><td>の書き方はわかりますが、下記のコードはグルナビのapiサイトから引用したものなので<tr><td>の表の中に入れるように変換するにはどうすればいいですか? ```html $html = '<tr><td>%1$s</td><td>%2$s</td><td>%3$s</td><td>%4$s</td><td>%5$s</td></tr>';
```PHP <?php /***************************************************************************************** ぐるなびWebサービスのレストラン検索APIで緯度経度検索を実行しパースするプログラム 注意:緯度、経度、範囲の値は固定で入れています。 アクセスキーはユーザ登録時に発行されたキーを指定してください。 *****************************************************************************************/ //エンドポイントのURIとフォーマットパラメータを変数に入れる $uri = "http://api.gnavi.co.jp/RestSearchAPI/20150630/"; //APIアクセスキーを変数に入れる $acckey= "input your accesskey"; //返却値のフォーマットを変数に入れる $format= "json"; //緯度・経度、範囲を変数に入れる //緯度経度は日本測地系で日比谷シャンテのもの。範囲はrange=1で300m以内を指定している。 $lat = 35.670083; $lon = 139.763267; $range = 1; //URL組み立て $url = sprintf("%s%s%s%s%s%s%s%s%s%s%s", $uri, "?format=", $format, "&keyid=", $acckey, "&latitude=", $lat,"&longitude=",$lon,"&range=",$range); //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'})) echo $restArray->{'name'}."\t"; if(checkString($restArray->{'access'}->{'line'})) echo (string)$restArray->{'access'}->{'line'}."\t"; if(checkString($restArray->{'access'}->{'station'})) echo (string)$restArray->{'access'}->{'station'}."\t"; if(checkString($restArray->{'access'}->{'walk'})) echo (string)$restArray->{'access'}->{'walk'}."分\t"; foreach((array)$restArray->{'code'}->{'category_name_s'} as $v){ if(checkString($v)) echo $v."\t"; } echo "\n"; } } } //文字列であるかをチェック function checkString($input) { if(isset($input) && is_string($input)) { return true; }else{ return false; } } ?>

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

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

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

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

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

tkanda

2016/06/12 10:20 編集

$json = file_get_contents($url); で取得した $json 変数(テキスト)はどのような文字列か、追記できますか?
442ky119

2016/06/12 11:55

すみません、jsonではなくxmlで出力したいんです。 引用しただけでxmlに変換するの忘れていました。 xmlに変換したコードを提示します。
guest

回答2

0

サンプルコードが「C言語しか書いたことないだろ…」と言いたくなるような雰囲気が漂う酷いコードだったので,ついカッとなって綺麗に書きなおしてしまいました…

html

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' => '04377bf256ad862acecf68ea87f6bc1b', 15 'format' => 'json', 16 'latitude' => '35.670083', 17 'longitude' => '139.763267', 18 'range' => '1', 19]; 20 21// リクエスト実行 22$ch = curl_init(); 23curl_setopt_array($ch, [ 24 CURLOPT_URL => $endpoint . '?' . http_build_query($params, '', '&'), 25 CURLOPT_RETURNTRANSFER => true, // レスポンスボディを返り値として取得 26 CURLOPT_FAILONERROR => true, // HTTPステータス400以上はエラーと見なす 27 CURLOPT_ENCODING => 'gzip', // 通信を圧縮する 28]); 29$response = curl_exec($ch); 30 31// エラーのときはテキストとしてエラーメッセージを出して終了 32if ($response === false) { 33 header('Content-Type: text/plain; charset=UTF-8', true, 500); 34 exit(curl_error($ch)); 35} 36 37// API側がクソ実装してなければこのjson_decodeは必ず成功するはず 38$obj = json_decode($response); 39 40// HTMLとして表示 41header('Content-Type: text/html; charset=UTF-8'); 42 43?> 44<!DOCTYPE html> 45<title>Example</title> 46<?php foreach ($obj->rest as $r): ?> 47<table border="1"> 48 <caption><?=h($r->name)?></caption> 49 <tr> 50 <th>ID</th> 51 <td><?=h($r->id)?></td> 52 </tr> 53 <tr> 54 <th>店舗名</th> 55 <td><?=h($r->name)?></td> 56 </tr> 57 <tr> 58 <th>アクセス</th> 59 <td><?=h($r->access->line)?><?=h($r->access->station)?>から<?=h($r->access->walk)?></td> 60 </tr> 61</table> 62<?php endforeach; ?>

投稿2016/06/12 13:03

編集2016/06/12 13:09
mpyw

総合スコア5223

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

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

442ky119

2016/06/12 15:57

ご回答ありがとうございます。 すみません、実はxmlで使いたいのですがjsonの所をxmlに変換するだけで大丈夫ですよね? obj = xml_decode($response);
mpyw

2016/06/12 16:09 編集

xml_decodeという関数は存在しません.SimpleXMLElementオブジェクトとして読み込むことになると思います…が,これは初心者が躓きやすい罠をたくさん持っているので,JSONをおすすめします.JSONのほうが構造がシンプルです. JSONのデータ型はPHPのデータ型に全てそのまま1対1で対応付けできますが,XMLは重複している要素が配列のように存在できたり,属性値を持っていたりして,JSONより遥かに取り扱いが複雑になります.
mpyw

2016/06/12 16:06

【文字列型/整数型/論理型の保持ができるか】 json_decode → できる SimpleXMLElement → できない上に,最終的に求める型に手動でキャストしなければならない → 例: 文字列型の場合は (string)$element のようなコードになる
442ky119

2016/06/12 16:28

ご回答ありがとうございます。 jsonの方が簡単なのですね。
guest

0

少しずつ試しでechoで出力して、結果を確認すれば自分で解決できるようになりますよー。
頑張って。
動作確認してませんが、こんな感じでできるのでは?

php

1 foreach((array)$val as $restArray){ 2echo '<tr>' 3 if(checkString($restArray->{'id'})) echo '<td>'.$restArray->{'id'}."</td>"; 4 ・・・ 5echo '</tr>' 6 7 }

投稿2016/06/12 11:51

onoche

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問