PHPで駅の近くの珈琲店を探す

(1/2)
駅データ.jp」が提供する WebAPI を利用し、駅の近くの珈琲店を探すプログラムを作ってみる。
WebAPI から返ってくる XML を解釈する際、PHP4 では DOM XML を、PHP5 では SimpleXML を利用してきたが、今回はPHP XML Library(Keith Devens.com)を利用したプログラムも紹介する。

サンプル・プログラムの流れ

駅データ.jp が用意する 2 つの API を利用しています。
まず、駅名検索APIによって駅の緯度・経度を求めます。次に、その緯度・経度情報を「座標から珈琲店 API」に代入し、最寄りの珈琲店情報を求めます。
SVG-W3C ※上図を見るにはSVGビューワが必要です。
Corel SVG Viewer

「駅データ.jp」による駅名探索

駅名検索 API」(駅データ.jp)は、入力パラメータ(IN)を GET で渡し、出力結果(OUT)は XML で戻るという API である。
space
URL
http://www.ekidata.jp/tools/api_station_n.html

入力パラメータ
項目名
フィールド名
内  容
キーワード w string 探索キーワード(駅名)
1 バイト以上 128 バイト以下
UTF-8 で URL エンコードすること
部分一致
SVG-W3C ※上図を見るにはSVGビューワが必要です。
Corel SVG Viewer

「駅データ.jp」による珈琲店探索

座標から珈琲店 API」(駅データ.jp)は、入力パラメータ(IN)を GET で渡し、出力結果(OUT)は XML で戻るという API である。
space
URL
http://www.ekidata.jp/tools/api_station_n.html

入力パラメータ
項目名
フィールド名
内  容
経度 lon double 世界測地系。小数表記
緯度 lat double 世界測地系。小数表記
SVG-W3C ※上図を見るにはSVGビューワが必要です。
Corel SVG Viewer

サンプル・プログラム(DOM XML/SimpleXML版)

プログラムを実行する

ダウンロード(PHP4/5共用)

サンプル・プログラムの解説

プログラムの流れは、いままで解説してきた WebAPI の扱いと同じである。

0091: /**
0092:  * 要素を配列に代入する(searchStation:DOM XML の下請け)
0093:  * @param array  $items 代入先の配列
0094:  * @param object $node DOM XML ノード
0095:  * @param string $elem 要素名
0096:  * @param string $xml_encoding XMLのエンコード
0097: */
0098: function domSetItems(&$items$node$elem$xml_encoding) {
0099:     global $InternalEncoding;
0100: 
0101:     $en  = $node->get_elements_by_tagname($elem);
0102:     $str = (string)$en[0]->get_content();
0103:     $str = mb_convert_encoding($str$InternalEncoding$xml_encoding);
0104:     $items[$elem] = $str;
0105: }
0106: 
0107: /**
0108:  * 要素を配列に代入する(searchStation:SimpleXML の下請け)
0109:  * @param array  $items 代入先の配列
0110:  * @param object $node SimpleXML ノード
0111:  * @param string $elem 要素名
0112:  * @param string $xml_encoding XMLのエンコード
0113: */
0114: function xmlSetItems(&$items$node$elem$xml_encoding) {
0115:     global $InternalEncoding;
0116: 
0117:     $str  = (string)$node->$elem;
0118:     $str = mb_convert_encoding($str$InternalEncoding$xml_encoding);
0119:     $items[$elem] = $str;
0120: }

今回、WebAPI の出力である XML のエンコード(UTF-8)と、プログラムの内部処理エンコード(グローバル変数 $internalEncoding を、あえて不一致にした。そこで、XML の内容を配列変数に取り込むための下請けとして、ユーザー関数 domSetItems(PHP4用)と xmlSetItems(PHP5用)を用意した。
space

space
この項つづく
header