PHP(ピー・エイチ・ピー)

【PHP】APIを使って天気情報を表示させてみました。

ページの端っこの方に天気を表示させる機会があったので、

その方法を記録しておきます。

天気の情報はlivwdoorのAPIを使って取得します。
※取得するエリアは東京都のものになります。

 

で、

ソースは調べれば結構出てくるので、

他の方が紹介してくれているソースをコピーして改良しただけですが、

以下のようにすれば大丈夫です。

<?php
$city_cd = "63"; //東京都のコード
$xml = "http://weather.livedoor.com/forecast/webservice/rest/v1?city={$city_cd}"; //APIのURL
$html = "";

$html .= "<table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" height=\"auto\">\n";
$html .= "<tr>\n";
$html .= "<td colspan=\"3\" style=\"text-align:center;\">";
//場所情報を取得
$obj = simplexml_load_file($xml);
$html .= "【<span style=\"font-weight:bold;\">" . $obj->location->attributes()->pref . "の天気</span>】";
$html .= "</td>";
$html .= "</tr>\n";
$html .= "<tr>\n";
//当日の天気
$obj = simplexml_load_file($xml . "&day=today");
$html .= getDateWeather($obj);
//明日の天気
$obj = simplexml_load_file($xml . "&day=tomorrow");
$html .= getDateWeather($obj);
//明後日の天気
$obj = simplexml_load_file($xml . "&day=dayaftertomorrow");
$html .= getDateWeather($obj);
$html .= "</tr>\n";
$html .= "</table>\n";

echo $html;

//天気を取得
function getDateWeather($obj){

$html .= "<td style=\"text-align:center;line-height:1.4em;font-size:14px;padding-top:5px;\">";
$html .= "<div>" . date_format(new DateTime($xml->forecastdate), "m/j") . "</div>";
$html .= "<div>" . $obj->day . "</div>";
$html .= "<div><img src=\"" . $obj->image->url . "\" width=\"" . $obj->image->width . "\" height=\"" . $obj->image->height . "\" alt=\"" . $obj->image->title . "\"></div>";
$html .= "<div style=\"margin:0px 15px;\">" . $obj->telop . "</div>";

//最低気温
$minTemp = ($obj->temperature->min->celsius > 0) ? $obj->temperature->min->celsius : "-";
//最高気温
$maxTemp = ($obj->temperature->max->celsius > 0) ? $obj->temperature->max->celsius : "-";

$html .= "<div>" . $minTemp . " ~ " . $maxTemp . "℃</div>";
$html .= "</td>\n";

return $html;

}
?>

やっていることを説明すると、

 

まず、

http://weather.livedoor.com/forecast/webservice/rest/v1

のURLに対して、

天気を取得したいエリアのコード(city)と取得したい日(day)のパラメータをくっつけてクエリを作成してやります。

 

今回は、

日付けのパラメータ(day)にはそれぞれtoday、tomorrow、dayaftertomorrowを設定して、

3日分の天気を表示させています。

 

あとは、

そのクエリで取得できるXMLのデータを

simplexml_load_file()でパースすれば、

<table>などでデザインだけ整形して表示させてやるだけです。

 

因みに、

以下の様にすることで、

各地域の天気情報ページヘのリンクを作成することも可能です。

<?php
$city_cd = "63"; //東京都のコード
$xml = "http://weather.livedoor.com/forecast/webservice/rest/v1?city={$city_cd}"; //APIのURL
$html = "";

$obj = simplexml_load_file($xml);

$html = getCityWeather($obj);

echo $html;

//天気を取得
function getDateWeather($obj){

$html .= "<td style=\"text-align:center;line-height:1.4em;font-size:14px;padding-top:5px;\">";
$html .= "<div>" . date_format(new DateTime($xml->forecastdate), "m/j") . "</div>";
$html .= "<div>" . $obj->day . "</div>";
$html .= "<div><img src=\"" . $obj->image->url . "\" width=\"" . $obj->image->width . "\" height=\"" . $obj->image->height . "\" alt=\"" . $obj->image->title . "\"></div>";
$html .= "<div style=\"margin:0px 15px;\">" . $obj->telop . "</div>";

//最低気温
$minTemp = ($obj->temperature->min->celsius > 0) ? $obj->temperature->min->celsius : "-";
//最高気温
$maxTemp = ($obj->temperature->max->celsius > 0) ? $obj->temperature->max->celsius : "-";

$html .= "<div>" . $minTemp . " ~ " . $maxTemp . "℃</div>";
$html .= "</td>\n";

return $html;

}

//各地の天気
function getCityWeather($obj){

//1列辺りの<td>の数
$num = 8;

$html .= "<table align=\"center\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" height=\"auto\">\n";
$html .= "<tr>\n";
$html .= "<td colspan=\"{$num}\" style=\"text-align:center;padding-top:15px;\">【<span style=\"font-weight:bold;\">各地の天気</span>】</td>";
$html .= "</tr>\n";

$html .= "<tr>\n";
$i = 1;
foreach($obj->pinpoint->location as $val){
$html .= "<td>【<a href=\"" . $val->link . "\" target=\"_blank\">" . $val->title . "</a>】</td>\n";
if(($i % $num) == 0) $html .= "</tr>\n<tr>\n";
$i++;
}

if(($i % $num) != 0){
for($i = 0; $i < ($num - $i - 1); $i++){
$html .= "<td></td>\n";
}
}
$html .= "</tr>\n";

$html .= "</table>\n";

return $html;

}
?>

何をやってるかは調べてみて下さい。

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. SEO対策とは
  2. SE(システムエンジニア)
  3. カメラ
  4. アクセス解析
  5. ファイアウォール
  6. 一眼レフカメラ
  7. システム開発用のアイキャッチ
  8. FTPサーバー
  9. システム開発用のアイキャッチ
  10. Warning
PAGE TOP