APIを使いたい-3
APIの対象は、livedoor「お天気Webサービス。」です。ここから例えば岡山南部の明日の天気予報をリクエストパラメーターを使用して、XMLで呼び出し、その中から必要なデータを取り出してWEBに表示させようと思います。PEARのXML_Serializerを使うことでXMLの解析ができ、必要な情報が読み出せます。
require_once "XML/Unserializer.php";
$xml_data = file_get_contents("http://weather.livedoor.com/forecast/webservice/rest/v1?city=88&day=tomorrow");
$parser = new XML_Unserializer(array('parseAttributes' => true));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();
print_r ($XML);
このprint_rは、変数の情報をかえすコマンドで、この場合、$XMLに収められた変数(パラメーターから得られたXMLの情報)の構造が分かります。実は最初見た時はよく分かりませんでした。このようになります。(UTF-8で出てくるのでブラウザのエンコードをUTF-8にします。)
Array
(
[version] => livedoor Weather Web Service 1.0
[author] => livedoor Weather Team.
[location] => Array
(
[area] => 中国
[pref] => 岡山県
[city] => 岡山
)
[title] => 岡山県 岡山 - 明日の天気
[link] => http://weather.livedoor.com/area/33/88.html?v=1
[forecastday] => tomorrow
[day] => Tuesday
[forecastdate] => Tue, 28 Aug 2007 00:00:00 +0900
[publictime] => Mon, 27 Aug 2007 05:00:00 +0900
[telop] => 曇り
[description] => 中国地方は、薄雲が広がっていますが、高気圧に覆われているため、概ね晴れています。
今日(27日)は、高気圧に覆われますが、湿った空気の影響で大気の状態が…
[image] => Array
(
[title] => 曇り
[link] => http://weather.livedoor.com/area/33/88.html?v=1
[url] => http://image.weather.livedoor.com/img/icon/8.gif
[width] => 50
[height] => 31
)
)
PHPの参考書など読んだ時、少し分かりにくいのでいつもとばしていた連想配列と気づくのに少し時間がかかりました。そのうえ、初歩の説明には、単純な連想配列の説明だけなので、このような配列の中に配列があるような多次元連想配列の分かりやすい説明には、なかなかお目にかかりません。いろいろと検索していると、
JOHO.BOO.JP というサイトにプログラミングメモのコーナーがあり、PHP、多次元配列という項目がありました。ここに多次元配列の情報を読み出す方法が書いてありました。これにより、先ほどの$XMLから必要な項目だけ読み出すことが出来ます。
print $XML["location"]["city"];
print $XML["link"];
print $XML["title"];
print $XML["telop"];
print $XML['image']['url'];
これで出力結果は、
岡山 http://weather.livedoor.com/area/33/88.html?v=1岡山県 岡山 - 明日の天気曇りhttp://image.weather.livedoor.com/img/icon/8.gif
となるはずです。後は、ひとつずつ文字コードをエンコードして、わかりやすくレイアアウトすればいいと思います。
vwfpxcko said,
4 月 21, 2008 @ 9:04 AM
vwfpxcko…
vwfpxcko (more…)