富士五湖TV

気象庁発表の天気予報をHPに表示する。

コテージ 戸沢センター
富士山の絶景が望める展望風呂を4棟完備

by Fujigoko.TV

ホーム/ 掲示板各種/ 気象庁発表の天気予報をHPに表示する。

富士五湖.TVに広告を出してみませんか?

特報、連載中の葛飾北斎の視点(凱風快晴)
NHK歴史秘話ヒストリア」(2017年4月21日放送)で検証されました

掲示板&投稿集

富士五湖いろいろ掲示板
イベント掲示板
地元掲示板
口コミ掲示板

富士五湖特派員報告
富士五湖TV報告
特派員外も五湖便り
投稿画像コーナー
富士山ベストショット
ライブカメラ画像集
ライブカメラ殿堂
FujigokoTVでつぶやく

富士山ライブカメラ

山中湖高台180度
山中湖平野(望遠)
山中湖長池
忍野富士
忍野八海
忍野高台
富士山五合目(望遠)
富士吉田中曽根(望遠)
河口湖母の白滝
河口湖富士山遥拝所
河口湖船津
河口湖逆さ富士
河口湖北岸(望遠)
河口湖大石湖畔
河口湖大石高台
河口湖勝山
鳴沢村公園(望遠)
精進湖子抱き
本栖湖千円札
富士ドクタービレッジ
富士ヶ嶺ゴルフ場
朝霧高原
大原学園富士宮(望遠)
富士宮市柚野
富士市茶畑(望遠)
河口湖畔
河口湖畔道の駅
マップ交通カメラ
富士五湖YouTube


気象庁発表の天気予報をHPに表示する。





2024年2月13日20時26分


久保覚 (富士五湖TV代表)

Profile 全投稿表示

気象庁発表の天気予報をHPに表示する。

googleの生成AIのBardがGeminiになった。その実力を見るために何かプログラムを作って確かめてみた。

気象庁では定期的にXMLフォーマット形式の電文を配信している。
このXMLファイルを定期的に自動で読み込めばHP上に天気予報を表示できるので実際にGoogleGeminiを使用してプログラムしてみた。

以下に表示に至るまでの方法をステップごとに備忘録として記録する。
===========
ステップ1.気象庁のXMLフォーマット形式の電文を定期的に取り込む。
 サーバーのcrontabで定期的にXMLファイルを取り込むよう設定。
 気象庁のファイルは「https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml」にある。
 読み込む方法はfreeBSDならfetchコマンドで取り込む。
 fetch -mp -o /自分のサーバーのパス/weatherJapan.rdf https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml
 以上で、自身のサーバー内にweatherJapan.rdfファイルとして取り込み完了。
---------------
ステップ2.取り込んだデータから「山梨県の最新データ」を取り込む。
 「ステップ1」で取り込んだ気象庁のデータは全国の気象データのindexのようなものなので、そこから山梨県の最新気象データを抽出する。
 具体的には、indexに並んでいるデータ群(過去データもある)から目的のデータを見つける。
 山梨県の気象予報なら、甲府気象台の「https://www.data.jma.go.jp/developer/xml/data/データの日付_0_VPFD51_190000.xml」となる。
 データは過去のアーカイブを含むので最新のデータ、つまりリストの先頭のindexを引く。
 indexの引き方はunixのshellScriptで自動化する。
 生成AIで、「VPFD51_190000を含むリストの先頭の文字を取り出すshellScriptを書け」と命令。
 weatherF=$(grep -Eo 'https:\/\/www\.data\.jma\.go\.jp\/developer\/xml\/data\/(.*)VPFD51_190000\.xml' /自分のサーバーのパス/weatherJapan.rdf | awk -F/ '{print $NF}' | head -1)
 上記の回答を得る。
 次は変数weatherFを使用して山梨県のXMLデータをfetchで読み込む。
 fetch -mp -o /自分のサーバーのパス/weatherYamanashi.rdf https://www.data.jma.go.jp/developer/xml/data/"${weatherF}"
 以上で、自身のサーバー内にweatherYamanashi.rdfファイルとして取り込み完了。

<Gemini最初の指令>
https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml
にあるXMLファイルから
https://www.data.jma.go.jp/developer/xml/data/*****_VPFD51_190000.xml
の部分を抽出し、抽出した先頭のみを表示するシェルを書け。
ただし、「*****」は任意の文字列。
解答→正規表現とgrepのパターンを提示してきた。正規表現はエラーになったのでgrepを使用し改良して使用。
---------------
ステップ3.「ステップ1」と「ステップ2」をcrontabで定期的に実行するようサーバーに記述する。
<weatherYamanashi.rdfファイルの中身例>
前段あり〜
<DateTime>2024-02-13T17:00:00+09:00</DateTime>
<Duration>PT7H</Duration>
<Name>今夜</Name>
</TimeDefine>
<TimeDefine timeId="2">
<DateTime>2024-02-14T00:00:00+09:00</DateTime>
<Duration>P1D</Duration>
<Name>明日</Name>
</TimeDefine>
<TimeDefine timeId="3">
<DateTime>2024-02-15T00:00:00+09:00</DateTime>
<Duration>P1D</Duration>
<Name>明後日</Name>
</TimeDefine>
</TimeDefines>
<Item>
<Kind>
<Property>
<Type>天気</Type>
<DetailForecast>
<WeatherForecastPart refID="1">
<Sentence>晴れ</Sentence>
<Base>
<jmx_eb:Weather type="天気">晴れ</jmx_eb:Weather>
</Base>
</WeatherForecastPart>
<WeatherForecastPart refID="2">
<Sentence>晴れ 昼過ぎ から くもり</Sentence>
<Base>
<jmx_eb:Weather type="天気">晴れ</jmx_eb:Weather>
</Base>
<Becoming>
<TimeModifier>昼過ぎ から</TimeModifier>
<jmx_eb:Weather type="天気">くもり</jmx_eb:Weather>
</Becoming>
</WeatherForecastPart>
<WeatherForecastPart refID="3">
<Sentence>くもり 後 一時 雨</Sentence>
<Base>
<jmx_eb:Weather type="天気">くもり</jmx_eb:Weather>
</Base>
<Temporary>
<TimeModifier>後 一時</TimeModifier>
<jmx_eb:Weather type="天気">雨</jmx_eb:Weather>
</Temporary>
</WeatherForecastPart>
</DetailForecast>
<WeatherPart>
<jmx_eb:Weather refID="1" type="天気">晴れ</jmx_eb:Weather>
<jmx_eb:Weather refID="2" type="天気">晴れ後くもり</jmx_eb:Weather>
<jmx_eb:Weather refID="3" type="天気">くもり後一時雨</jmx_eb:Weather>
</WeatherPart>
<WeatherCodePart>
<jmx_eb:WeatherCode refID="1" type="天気予報用テロップ番号">100</jmx_eb:WeatherCode>
<jmx_eb:WeatherCode refID="2" type="天気予報用テロップ番号">111</jmx_eb:WeatherCode>
<jmx_eb:WeatherCode refID="3" type="天気予報用テロップ番号">212</jmx_eb:WeatherCode>
</WeatherCodePart>
</Property>
</Kind>
<Kind>
<Property>
<Type>風</Type>
〜以下続く
---------------
ステップ4.定期的に取り込んだ山梨県の天気予報データ(weatherYamanashi.rdf)を解析する。
 解析にはperlプログラムを使用する。
 必要な部分のみperlの正規表現を使用してプログラムしようとしたが、今回は「XML::Simple;」を使用することにした。
use File::Slurp;
use XML::Simple;
use Data::Dumper;
my $xml = read_file("weatherYamanashi.rdf"); #ファイルの読み
my $parser = XML::Simple->new(); #XML::Simple使用準備
my $parser_data = $parser->XMLin( $xml); #取り込み
print Dumper($parser_data); #結果表示
〜取り込まれたデータ例
$VAR1 = {
'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/',
'xmlns:jmx' => 'http://xml.kishou.go.jp/jmaxml1/',
'Control' => {
'DateTime' => '2024-02-11T01:34:15Z',
'Status' => "\x{901a}\x{5e38}",
'PublishingOffice' => "\x{7532}\x{5e9c}\x{5730}\x{65b9}\x{6c17}\x{8c61}\x{53f0}",
'EditorialOffice' => "\x{7532}\x{5e9c}\x{5730}\x{65b9}\x{6c17}\x{8c61}\x{53f0}",
'Title' => "\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}\x{ff08}\x{ff32}\x{ff11}\x{ff09}"
},
'Head' => {
'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/informationBasis1/',
'TargetDateTime' => '2024-02-11T11:00:00+09:00',
'Headline' => {
'Text' => {}
},
'InfoKind' => "\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}",
'TargetDuration' => 'P2DT13H',
'EventID' => {},
'Serial' => {},
'Title' => "\x{5c71}\x{68a8}\x{770c}\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}",
'InfoType' => "\x{767a}\x{8868}",
'InfoKindVersion' => '1.0_1',
'ReportDateTime' => '2024-02-11T11:00:00+09:00'
},
'xmlns:jmx_add' => 'http://xml.kishou.go.jp/jmaxml1/addition1/',
'Body' => {
'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/body/meteorology1/',
'xmlns:jmx_eb' => 'http://xml.kishou.go.jp/jmaxml1/elementBasis1/',
'MeteorologicalInfos' => [
{
'TimeSeriesInfo' => [
{
'Item' => [
{
'Area' => {
'Code' => '190010',
'Name' => "\x{4e2d}\x{30fb}\x{897f}\x{90e8}"
---------------
ステップ5.必要な部分のみ取り出す
 例えば、天気予報の部分を取り出す
sub getJMAWeatherTenki{
my $data = shift; #取り込んだハッシュ
my $place_id = shift; #地域コード:富士五湖=1
my $time_id = shift; #今日=1,明日=2、明後日=3

my $content;
foreach my $weather_define ( @{$data->{Body}{MeteorologicalInfos}[0]{TimeSeriesInfo}[0]{Item}[$place_id]{Kind}[0]{Property}{WeatherPart}{'jmx_eb:Weather'}} ){
if( $weather_define->{refID}==$time_id ){
$content = $weather_define->{content};
}
}
return $content;
}
戻り値例:「くもり後晴れ」

<Gemini最初の指令>
weatherYamanashi.rdfを解析し、天気データ「{jmx_eb:Weather}」の「{refID}」が一致する文字列「{content}」を得よ。
解答→得た答えを修正して上記を仕上げた。
---------------
ステップ6.天気予報の文字から画像を作成する
 まず以下の画像データを意味付けしたファイル名で作成する。
 文字列から画像ファイル名を構成する。
sub getJMAWeatherImg{
my $weather_str = shift; #天気文字列
my $time_id = shift; # my %exDayId = ( '今日' => 1, '明日' => 2, '明後日' => 3 );

use constant WEATHER_CODES => { '晴れ' => 1, 'くもり' => 2, '雨' => 3, '雪' => 4, };
use constant TIME_CODES => { '時々' => 1, '後' => 2, };

my @parts = split(/(後|時々)/, $weather_str);
my $a = WEATHER_CODES->{ $parts[0] } || 0;
my $b = TIME_CODES->{ $parts[1] } || 0;
my $c = WEATHER_CODES->{ $parts[2] } || 0;
my $p = 0;
my $name; #以下は「今夜」の場合を考慮する
foreach my $time_define ( @{$exParserData->{Body}{MeteorologicalInfos}[0]{TimeSeriesInfo}[0]{TimeDefines}{TimeDefine}} ){
if( $time_define->{timeId}==$time_id ){
$name = $time_define->{Name};
}
}
Jcode::convert( \$name, 'utf-8'); #ファイル内はUTF-8だが、そのままでは使用できない
my $fDayw = Jcode::convert( '今夜', 'utf-8'); #そのため比べる両者をUTF-8で再矯正する
if( $name eq $fDayw ){ $p = 1; }
my $fileImg = sprintf("tnk%04d.png", $p . $a . $b . $c);
return $fileImg;
}
 何故か文字化けが発生し苦労したが上記の方法で回避

<Gemini最初の指令>
「晴れ」、「晴れ後くもり」、「雨時々雪」と言った文字列があります。
「後」と「時々」をキーに文字列を前後に分けて上の例なら、
「晴れ」、「晴れ」「後」「くもり」、「雨」「時々」「雪」と文字列を分解するperlプログラムを書け。

得た文字列を、「晴れ」=1、「くもり」=2、…のように3桁の数字に置き換えよ。
解答→得た答えを修正して上記を仕上げた。
---------------
ステップ7.以上のプログラムを半分以上生成AIに手伝ってもらい完成させた。
 あとは自分の環境に合わせて関数化し汎用ライブラリーとして保管。
---------------

 以上、動作例は「https://live.fujigoko.tv/?n=30」等を参照。

今回は自身と気象庁のサーバー負荷を考え以上のようにしたが、「ステップ1」と「ステップ2」を省いて全てperlで記述すればその都度全国の気象データを得ることができる。
具体的には、https://www.data.jma.go.jp/developer/xml/feed/regular_l.xmlから全国の気象データを抽出すれば良いようにプログラムをさらに汎用化し公開もできる。
が、自身のサーバーでそのサービスを提供するメリットがあるかどうかと考えてしまった。

#コンピュータ #AI #人工知能 #プログラム 

コメント

削除修正新規









 
富士山周辺特派員MENU
すべての投稿報告
広域公共情報報告(標準表示)
会員のプライベート報告
富士五湖TVから報告

<<2024年>>12月
1 2 3 4 5 6 7 8 9 10 11 12

過去のタイトル(新着順)
フリースクール

富士山マラソン

2022年12月11日にオリオン宇宙船が地球の大気圏に再突入した時の船内映像

富山市LRT

福井県議会訪問

議会運営委員会研修

流石やすし県政報告Vol.16 令和6年6月発行

ジムニーの内装を変更

ジムニーのフロントグリルを交換

静岡市立蒲原東小学校にて葛飾北斎の講演会を行いました

葛飾北斎の冨嶽三十六景「尾州不二見原」の模型の量産化できた

いよいよ足和田トンネル(仮称)が、

KUKUNA  七夕

ECOプランについて

SDGsの達成に向けてKUKUNAの計画

葛飾北斎の冨嶽三十六景のひとつ「尾州不二見原」の試作模型ができた。

富士市にて葛飾北斎の講演会を行います

フラックスを作る

新緑の会NEWS発行

PC-98顛末記その2 FD1238Tのベルト交換

PC-98Noteが壊れた。

富士五湖サミット

2024年4月14日富士山火入れ野焼きの空撮動画

陳情

2024年 勝山さくら祭り

金庫の仕組みを3Dプリンターで

LEDで点滅する北斎の冨嶽三十六景

自動餌やり機

気象庁発表の天気予報をHPに表示する。

漫画にかける青春録

数字であそぼ。

Suno AI, chatGPT, 最新のAIでどこまで楽曲ができるか? その2

Suno AI, chatGPT, 最新のAIでどこまで楽曲ができるか?

流石やすし県政報告Vol.20 令和6年1月発行

弾いてみた - Room 335

弾いてみた - Europa

弾いてみた - Hotel California

弾いてみた - Smoke on the Water

弾いてみた - 傷だらけの天使

過去のFacebookから転載「SONY VECTRON」

過去のFacebookから転載「T-Boardについて」

会派研修

会派研修

2023年 道の駅かつやま 感謝祭

夜の県庁

1日だけの夏服

足和田地区陳情

*****

農政産業観光委員会の研修

農政産業観光委員会

過去の投稿者(新着順)
流石やすし

久保覚 (富士五湖TV代表)

風のテラスKUKUNA くくな

勝山観光協会・勝山民宿組合

ビュー山中湖

Team Let's Fuji

富士河口湖小立オートキャンプ場鼻曲(はなまがり)

中川雄三

インターリゾート東屋 (天野猶治)

富士五湖情報局(富士五湖TV)

富士山五合目観光協会

元祖室

河口湖美術館

社会福祉法人欣寿会・特別養護老人ホーム芙蓉荘

しゅうすいや・SHUSUIYA

くくな 周辺観光用

ニューブリッヂキャンプ場

富士写真家連盟

忍野観光農園 富士忍野ベリーランド

ウッドストック

山中湖レークサイドボウル

河口湖・ボートハウス ハワイ

株式会社ひまわり 山中湖店

フジシロ工業(有)

山中湖ペンション ブルーリボン

しゅんちゃんち

河口湖 観光遊覧屋形船

河口湖アートクラフトフェア

温泉民宿 丸弥荘

サンプル情報


 
ホーム / 掲示板各種/ 気象庁発表の天気予報をHPに表示する。
 

Copyright (C) 2001 Fujigoko.TV. All Rights Reserved.