読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

PHPでLivedoor Weather HacksのAPIから天気予報の情報をJSONで取得して、ブラウザに表示する。

PHP
<スポンサーリンク>

天気予報の情報を取得する。

天気予報の情報を取得するために、Livedoorのお天気Webサービスを利用する。
取得して表示するイメージはこんな感じ。

お天気Webサービスの仕様は以下の通り。
http://weather.livedoor.com/weather_hacks/webservice

こいつに書かれているように、

http://weather.livedoor.com/forecast/webservice/json/v1?city=016010

こんな感じで、cityをパラメータにして、IDを指定すると、指定した地域の天気予報を取得することができる。
取得するJSONのイメージはこんな感じ。
わざと改行しているが、返ってくるJSONは改行されていない。

"forecasts":[
{"dateLabel":"\u4eca\u65e5",
"telop":"\u6674\u308c",
"date":"2013-10-06",
"temperature":{"min":null,"max":null},
"image":{"width":50,"url":"http://weather.livedoor.com/img/icon/1.gif",
"title":"\u6674\u308c","height":31}},
{"dateLabel":"\u660e\u65e5",
"telop":"\u6674\u306e\u3061\u66c7",
"date":"2013-10-07",
"temperature":{"min":{"celsius":"12","fahrenheit":"53.6"},"max":{"celsius":"21","fahrenheit":"69.8"}},
"image":{"width":50,"url":"http://weather.livedoor.com/img/icon/5.gif","title":"\u6674\u306e\u3061\u66c7","height":31}},
{"dateLabel":"\u660e\u5f8c\u65e5","telop":"\u6674\u6642\u3005\u96e8","date":"2013-10-08","temperature":{"min":null,"max":null},
"image":{"width":50,"url":"http://weather.livedoor.com/img/icon/3.gif","title":"\u6674\u6642\u3005\u96e8","height":31}}
]

お天気情報サービスの市IDだけど、どの市がどのIDかは、

http://weather.livedoor.com/forecast/rss/primary_area.xml

XMLを見ればわかる。
今回は札幌の情報を取得する。

前準備として、php.iniのデフォルトの文字コードUTF-8に変更する。

C:\xampp\php\php.iniの以下を編集。
最初はコメントアウトされている。

default_charset = "UTF-8"

PHPLivedoorの天気予報APIから天気や最高気温などの情報を取得してブラウザに表示するサンプル

これまでに書いた情報を実際に使うためのPHPのサンプルは以下の通り。

<?php
$tmp_url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=016010";
$json = file_get_contents($tmp_url,true) or die("Failed to get json");
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$obj = json_decode($json);

$img_url = $obj->forecasts[0]->image->url;
$date = $obj->forecasts[0]->date;
$title = $obj->forecasts[0]->image->title;

$min = $obj->forecasts[1]->temperature->min->celsius;
$max = $obj->forecasts[1]->temperature->max->celsius;
$telop = $obj->forecasts[1]->telop;
$tomorrow = $obj->forecasts[1]->dateLabel;
$tomorrow_img = $obj->forecasts[1]->image->url;

?>
<h1>weather forecast</h1>
<div>
<p> TODAY:<?php echo $date;?></p>
<p> TODAY TITLE:<?php echo $title; ?></p>
<p> TODAY IMAGE:<?php echo "<img src='".$img_url."'>"; ?></p>
<p> TOMORROW TELOP:<?php echo $telop ?></p>
<p> TOMORROW:<?php echo $tomorrow; ?></p>
<p> TOMORROW MAX TEMPARATURE:<?php echo $max; ?></p>
<p> TOMORROW MIN TEMPARATURE:<?php echo $min; ?></p>
<p> TOMORROW IMAGE:<?php echo "<img src='".$tomorrow_img."'>"; ?></p>

</div>

このPHPに対してブラウザでアクセスすると、一番上のイメージのような画面が表示される。

感謝のプログラミング

今回で感謝のプログラミングは【662時間目】
10000時間まで、あと【9338時間】