PHPなどのWebアプリケーションを作成するときに,API(アプリケーション・プログラミング・インタフェース,Application Programming Interface)サービスを利用して,Webサイトを作成する機会が多くなっているのではないでしょうか?
今回は実際に天気APIサービスを利用して,天気情報を出力してみましょう。
APIの出力データ形式には,比較的XMLを使用することが多いです。
今回は,PHP4でXMLを使用するためのライブラリPEAR::XML_SerializerとPHP5から使用できるようになったSimple_XMLを使用して,天気情報を出力します。
天気情報APIとして,Livedoor社提供の「weather hacks」というAPIを使用します。
http://weather.livedoor.com/weather_hacks/
PEAR::XML_Serializerのインストール方法は下記のTipsをご参照ください。
http://www.phppro.jp/phptips/archives/vol28/
ここでは,PEAR::XML_Serializerで今日の東京の天気をSimple_XMLで明日の東京の天気を取得しています。
それでは,実際に以下のスクリプトを実行してみましょう。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>お天気API</title>
</head>
<body>
<?php
//PEAR::XML_Serializerでの実装方法
require_once("XML/Unserializer.php");
$base_url =
"http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today";
$xmldoc = join("",file($base_url));
$opt = array (
'complexType' => 'object',
'parseAttributes' => 'true',
'attribuesArray' => '_attributes',
);
$xml = new XML_Unserializer($opt);
$xml -> unserialize($xmldoc, false);
$xml = $xml->getUnserializedData();
$place = $xml->location->pref . $xml->location->city;
$img = $xml->image->url;
$img_width = $xml->image->width;
$img_height = $xml->image->height;
$url = $xml->link;
$description = nl2br($xml->description);
$date_rfc822 = $xml->forecastdate;
$date = date("m/j(D)",strtotime($date_rfc822));
$telop = $xml->telop;
print <<< DOC_END
<div>
<div>
{$place}({$date})
<a href=$url target="_blank">
<img src=$img border="0" alt=$place hegiht="$img_height" width="$img_width">
</a>{$telop}<br>
{$description}
<br />
</div>
</div>
DOC_END;
?>
<hr />
<?php
//Simple_XMLでの実装方法
$base_url =
"http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=tomorrow";
$xml = simplexml_load_file($base_url);
$city_name = $xml->location->attributes();
$place = $city_name["pref"] . $city_name["city"];
$img = $xml->image->url;
$img_width = $xml->image->width;
$img_height = $xml->image->height;
$url = $xml->link;
$description = nl2br($xml->description);
$date_rfc822 = $xml->forecastdate;
$date = date("m/j(D)",strtotime($date_rfc822));
$telop = $xml->telop;
print <<< DOC_END
<div>
<div>
{$place}({$date})
<a href=$url target="_blank">
<img src=$img border="0" alt=$place hegiht="$img_height" width="$img_width">
</a>{$telop}<br>
{$description}
<br />
</div>
</div>
DOC_END;
?>
</body>
</html>
このように,weather hacksのAPIを使用することで簡単に天気情報を出力できました。取得できる情報などをもっと詳しく知りたい方は以下のURLをご参照ください。
http://weather.livedoor.com/weather_hacks/webservice.html
非公式のパッケージですが,PEARのライブラリとしても使用することができます。
pear install
他にも天気情報を提供しているところがあります。
http://www.weathermap.co.jp/hitokuchi_rss/
http://developer.yahoo.com/weather/index.html
海外のyahooが天気APIを一般公開していますが,詳細な日本のデータとしては紹介したサイトに比べると,まだまだ使用できる段階ではありません。
また,紹介したサイトの天気情報は個人利用では無料で使用できますが,商用利用としては許可されていないものもありますので,気をつけて使用しましょう。
今日,地図のAPIや天気情報のAPIなど,いろいろなAPIが公開されています。この機会に是非,皆さんも天気情報以外のXMLで記述されたAPIをPHPで取得し,使用してみてはいかがでしょうか。
(アシアル 笹亀弘)
この記事は,アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは,他にもPHP最新ニュースや,困ったときのQ&A掲示板,初心者向けのPHP講座など,PHP開発者をサポートする情報を掲載しています。