ブログを検索

2021/08/14

アメダスAPI取得サンプル

 リクエストを頂いたのでアメダスのデータを取得するサンプルを載せておきます。

$ php -v
PHP 7.3.29-1~deb10u1 (cli)
という環境ですがPHP5以上であれば気にする必要は無いと思います。
get_amedas_sample.php というファイル名でサンプルプログラムを作りました。
その内容を cat したのが下記です

$ cat get_amedas_sample.php
<?php
// 横手市のアメダスデータを取得して表示する
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_regex_encoding('UTF-8');
date_default_timezone_set('Asia/Tokyo');

// 現在日時から20分前を求める(あまり直近だとデータが取れないぽい)
$day = new DateTime('-20 minutes');
$target_time = substr( $day->format('YmdHi00') , 0 , 11) . '000';
if(!($lxml =    @file_get_contents("https://www.jma.go.jp/bosai/amedas/data/map/$target_time.json"))){
    // アクセス失敗
    echo 'file_get_contents error exit.'.PHP_EOL;
    exit;
}

$lxml = mb_convert_encoding($lxml, 'UTF8', 'JIS,UTF-8,EUC-JP,SJIS-WIN,ASCII');
$json_arr = json_decode($lxml,true);
/*
URL には10分毎の観測時刻指定が可能 */10
32596は横手市の観測所番号です
各地の観測所番号は下記です (公的機関がhttpか・・・) http://www.jma.go.jp/jma/kishou/know/amedas/ame_master_20210707.pdf
*/
$station_number = '32596';
$measurement_date = substr($target_time,0,4) .'-'.
                                     substr($target_time,4,2) .'-'.substr($target_time,6,2) .' '.
                                     substr($target_time,8,2) .':'.substr($target_time,10,2).
                                  ':'.substr($target_time,12,2);

echo "観測所番号:$station_number 観測時刻:$measurement_date" . PHP_EOL;
foreach($json_arr[$station_number] as $key => $value){
    echo $key . ' ' . $value[0] . ' ' . $value[1] . PHP_EOL;
}
?>
↑ ここまでがサンプルプログラム

下記が実行結果です
$ php get_amedas_sample.php
観測所番号:32596 観測時刻:2021-08-14 16:50:00
temp 19.8 0
sun10m 0 0
sun1h 0 0
precipitation10m 0 0
precipitation1h 0 0
precipitation3h 0 0
precipitation24h 2 0
windDirection 6 0
wind 1.1 0
$

おそらく他のバージョンの PHP(PHP5以上)や、Windows,UnixライクなOS,MacOSなどでもイケるかと思います
php.ini で file_get_contents で URL指定できるように、というのと mbなんとか達を使えるようにしておく必要がありますのでご注意ください
当たり前ですが過剰なアクセスは控えなければなりません

0 件のコメント:

コメントを投稿

MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく 環境 Windows10 Pro バージョン 1809 MySQL 8.4.0 という環境で SELECT * FROM table1...