概要
気象庁が提供しているAPIから天気情報をWordPressに表示します。
エリア情報
エリア情報は下記URLから確認することができます。
https://www.jma.go.jp/bosai/common/const/area.json
JSONのcenters>children
が取得できるJSONになります。
例)宗谷地方
https://www.jma.go.jp/bosai/forecast/data/forecast/011000.json
北海道地方 | |
---|---|
宗谷地方 | 011000 |
上川・留萌地方 | 012000 |
網走・北見・紋別地方 | 013000 |
十勝地方 | 014030 |
釧路・根室地方 | 014100 |
胆振・日高地方 | 015000 |
石狩・空知・後志地方 | 016000 |
渡島・檜山地方 | 017000 |
東北地方 | |
青森県 | 020000 |
岩手県 | 030000 |
宮城県 | 040000 |
秋田県 | 050000 |
山形県 | 060000 |
福島県 | 070000 |
関東甲信地方 | |
茨城県 | 080000 |
栃木県 | 090000 |
群馬県 | 100000 |
埼玉県 | 110000 |
千葉県 | 120000 |
東京都 | 130000 |
神奈川県 | 140000 |
山梨県 | 190000 |
長野県 | 200000 |
東海地方 | |
岐阜県 | 210000 |
静岡県 | 220000 |
愛知県 | 230000 |
三重県 | 240000 |
北陸地方 | |
新潟県 | 150000 |
富山県 | 160000 |
石川県 | 170000 |
福井県 | 180000 |
近畿地方 | |
滋賀県 | 250000 |
京都府 | 260000 |
大阪府 | 270000 |
兵庫県 | 280000 |
奈良県 | 290000 |
和歌山県 | 300000 |
中国地方(山口県を除く) | |
鳥取県 | 310000 |
島根県 | 320000 |
岡山県 | 330000 |
広島県 | 340000 |
四国地方 | |
徳島県 | 360000 |
香川県 | 370000 |
愛媛県 | 380000 |
高知県 | 390000 |
九州北部地方(山口県を含む) | |
山口県 | 350000 |
福岡県 | 400000 |
佐賀県 | 410000 |
長崎県 | 420000 |
熊本県 | 430000 |
大分県 | 440000 |
九州南部・奄美地方 | |
宮崎県 | 450000 |
奄美地方 | 460040 |
鹿児島県(奄美地方除く) | 460100 |
沖縄地方 | |
沖縄本島地方 | 471000 |
大東島地方 | 472000 |
宮古島地方 | 473000 |
八重山地方 | 474000 |
スクリプト
今回は京都南部の天気を表示します。
function weather_search(){
if ( false === ( $weather_data = get_transient( 'weather' ) ) ) {
$list = array();
$url = "https://www.jma.go.jp/bosai/forecast/data/forecast/260000.json";
$json = file_get_contents($url);
try {
$result = json_decode( $json, true, 512, JSON_THROW_ON_ERROR );
} catch ( JsonException $e ) {
}
if ($result !== NULL) {
$week = array("日","月","火","水","木","金","土") ;
$timeDefines = $result[0]['timeSeries'][0]['timeDefines'];
$weatherCodes = $result[0]['timeSeries'][0]['areas'][0]['weatherCodes'];
foreach ($timeDefines as $key => $item){
$list[] = array(
'date' => date('m月d日',strtotime($item)) .'(' . $week[date('w',strtotime($item))].')',
'img' => 'https://www.jma.go.jp/bosai/forecast/img/'. $weatherCodes[$key] .'.png'
);
}
$weather_data = $list;
set_transient( 'weather', $weather_data, 2 * HOUR_IN_SECONDS );
}
}
return $weather_data;
}
$result内
には2つの配列がありますが、取得できる情報や日数が違うようです。
必要な情報を取得してください。
今回は日付と天気だけですので$result[0]
の情報を使用して表示します。
日付データ・天気コード
$timeDefines = $result[0]['timeSeries'][0]['timeDefines'];
$weatherCodes = $result[0]['timeSeries'][0]['areas'][0]['weatherCodes'];
日付情報はtimeDefines
で天気情報はweatherCodes
で取得しています。
['areas'][0]
としているのは京都は北部と南部の情報があるので、南部の情報を取得するようにしています。
画像URL
'img' => 'https://www.jma.go.jp/bosai/forecast/img/'. $weatherCodes[$key] .'.png'
天気コードを元に画像のURLを作成しています。
表示部分
<?php
$list = weather_search();
?>
<ul>
<?php foreach ($list as $key => $item){ ?>
<li>
<div class="img">
<img src="<?php echo $item['img']; ?>" alt="">
</div>
<div class="date">
<?php echo $item['date'] ;?>
</div>
</li>
<?php } ?>
</ul>
コメントを投稿する