富士五湖TV

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

忍野八海 池本
忍野八海の中心

by Fujigoko.TV

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

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

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

掲示板&投稿集

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

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

富士山ライブカメラ

山中湖高台180度
山中湖平野(望遠)
山中湖長池
忍野富士
忍野八海
忍野高台
富士山五合目(望遠)
富士吉田中曽根(望遠)
河口湖母の白滝
河口湖富士山遥拝所
河口湖船津
河口湖逆さ富士
河口湖北岸(望遠)
河口湖大石湖畔
河口湖大石高台
河口湖勝山
鳴沢村公園(望遠)
西湖・樹海
精進湖子抱き
本栖湖千円札
富士ドクタービレッジ
富士ヶ嶺ゴルフ場
職業訓練センター(望遠)
大原学園富士宮(望遠)
富士宮市柚野
富士市茶畑(望遠)
河口湖畔
河口湖畔道の駅
山中湖畔
明見湖(広角)
国139昭和大入口
マップ交通カメラ
富士五湖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年>>10月
1 2 3 4 5 6 7 8 9 10 11 12

過去のタイトル(新着順)
静岡市立蒲原東小学校にて葛飾北斎の講演会を行いました

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

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

KUKUNA  七夕

ECOプランについて

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

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

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

2024年 勝山さくら祭り

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

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

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

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

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

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

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

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

*****

chatGPTとともにLUAで動画配信OBSでカメラシーンを切り替えるスクリプトのプログラム

蝙蝠オーグのアジトは河口湖ステラシアターだった⁉

第44回 甲斐の勝山やぶさめ祭り

第12回 富士・河口湖さくら祭り

令和5年 勝山さくら祭り スタンプラリー

ChatGPTが予言したAIの支配するシナリオ

今話題のChatGPTでAI本人と人工知能の将来を語ってみた

公開されている3Dプリンター用のデータについて

富士宮市秋のまつり

河口湖は紅葉の時期を迎えました

iPhone14Proでスキャニング〜3D印刷

足和田バイパス着手式典

道の駅かつやま 感謝祭

2022年火祭り交通規制

富士山山開き

令和4年4月29日(昭和の日)の甲斐の勝山やぶさめ祭りは中止になりました。

勝山さくら祭り

中央道 集中工事

電気自動車用急速充電器の入替について

アミューズ花火大会

映画コンテイジョン

*****

映画マトリックス再び

道の駅かつやま レストラン休業のお知らせ

【フォトスポット】

【7月の藤と蝶】

Rainy day

KUKUNA Garden

6月 富士山

中川雄三さんは故人になりました

山中湖湖畔にて早朝散歩 絶景富士山を望む

四季の彩りに満ちたMtfuji Resort Yamanakako

過去の投稿者(新着順)
久保覚 (富士五湖TV代表)

流石やすし

風のテラスKUKUNA くくな

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

ビュー山中湖

中川雄三

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

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

富士山五合目観光協会

元祖室

河口湖美術館

しゅうすいや・SHUSUIYA

くくな 周辺観光用

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

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

富士写真家連盟

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

ウッドストック

Team Let's Fuji

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

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

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

しゅんちゃんち

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

温泉民宿 丸弥荘

浮世絵の中の富士山

富士北麓ペットネット会員ページ

フジシロ工業(有)

香りと色彩のアトリエ紗泡(SAPO) 山梨セラピスト協会

日本の世界遺産 - World Heritage in Japan


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

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