GoogleAnalytics

SyntaxHighlighter

2016年10月9日日曜日

[Glaeja] 「OpenWeatherMap」による天気情報について

 『Glaeja』では、ver. 4.7.0より「OpenWeatherMap」で提供されるデータを天気情報ソースの1つとして利用できます。またver. 4.7.0以降では、天気情報に展開されるエスケープキャラクタ「%」の展開文字が、天気情報ソースごとに異なったものとなっています。

 本エントリでは、天気情報ソースに「OpenWeatherMap」を選んだ場合の、設定方法とエスケープキャラクタについて解説します。



目次




設定画面


 『Glaeja』の環境設定で、[天気情報の取得先]に「OpenWeatherMap」を選んだ後、[天気情報取得の設定...]をクリックすると、以下の「OpenWeatherMap」の設定画面に移動します。

「OpenWeatherMap」の設定画面

 画面の一番下には、「OpenWeatherMap」が提供する天気データが準拠するクリエイティブ・コモンズ・ライセンスとそのリンクが表示されています。

 天気情報の取得先に「OpenWeatherMap」を選んだ場合、天気データの更新間隔は「1時間」固定です。

APIキー


 『Glaeja』で「OpenWeatherMap」からの天気データを利用するには、ユーザー各自でデータ取得のための「APIキー」を取得し設定していただくことになっています。

(本来は「アプリ開発側のAPIキーで取得した天気データを自前サーバを介してアプリユーザーに二次配布する」という形式にするものなのでしょうが、そのための初期投資コストを払うのは、しがない個人開発者にはツラいです......)

 拙エントリ「"OpenWeatherMap"アカウントの作成とAPIキーの取得方法」を参考にして、ユーザー各自でAPIキーを取得してくださるようお願いします。

 設定画面の[APIキー]をクリックし、表示されたダイアログに取得したAPIキーを入力してください。

APIキー入力ダイアログ

 入力後に[OK]をクリックすると、そのAPIキーで「OpenWeatherMap」のサーバに接続して、天気データ取得を試みます。

 入力したAPIキーが正しければ、天気データ取得に成功し、以下のようなポップアップが表示されます。

天気データ取得に成功


 正しくないAPIキーの場合には、以下のようなポップアップとなりますので、再入力してください。


天気データ取得に失敗

 正しいAPIキーを入力すると、下にある[位置指定の方法]と[位置]を設定することができるようになります。


位置設定の方法


 「OpenWeatherMap」からの天気データで、参照する地点の位置を設定する方法には、以下リスト画面にある3つの方法があります。


位置指定方法の選択リスト

都市ID


都市IDによる位置指定

 「OpenWeatherMap」が内部で使用している都市のID番号で直接に指定する方法です。設定したい地点に相応する都市IDを知っているのであれば、これが一番確実な方法ですが、そのIDを知る方法が面倒なのでオススメはしません。

 この「都市ID」で位置を指定した場合、その地点の都市名が[都市と国名]に、その地点の緯度・経度が[緯度と経度]に自動的に設定されます。

都市と国名


都市と国名による位置指定

 「Kamata, JP」のように、設定したい地点の都市名と国名(※必ず2文字の略号)をコンマで区切って入力します。「OpenWeatherMap」に登録されている地点のなかから、入力した都市名と国名に(よくわからないナゾのアルゴリズムで)最も似たものが選ばれるようです。

 [都市ID]と[緯度と経度]は、選ばれた地点のものが自動的に設定されます。

 ※ ちなみに、2016-10-03の時点で、日本国内の約1400箇所の地点が登録されているようです。

 一見これが一番直感的な指定方法なのですが、「都道府県名」のような副次的な情報を入力できませんし、表示もされませんので、本当に期待していた地点に設定されているのかわかりにくい、という問題もあります(位置指定の方法を[緯度と経度]に変更して、それらから地図を使って確認することは可能ですが...)。

 ※ ちなみに、上記のように「Kamata, JP」と設定した場合、そこは実は「東京都大田区蒲田」ではありません。これは「都市ID:2112903」である「福島県田村市船引町」となります(これがなぜ Kamata なのかは不明)。実際に「東京都大田区蒲田」辺りを設定したい場合には「都市ID:6419432」を設定する必要があります。しかし、そこの都市名である「Showajima, JP」を設定すると、これは「都市ID:1865485」である「東京都中央区佃二丁目」となってしまいます。なんというか、期待するだけ無駄な気もしますね...

緯度と経度


緯度と経度による位置指定

 これは、入力した緯度・経度に最も近い「OpenWeatherMapに登録されている地点」を探索して、そこに設定する方法となります。

 [都市ID]と[都市名と国名]は、探索された地点のものが自動的に設定されます。

 設定したい地点の緯度・経度をGoogleマップなどで調べて入力すれば、確実にその場所に近い地点を設定できるので、この方法が一番オススメです。ただ、この方法には1つだけ難点というか分かりにくい点があります。それは、入力した緯度・経度と、設定された地点の実際の緯度・経度は若干異なっている、というものです。

 例えば、「東京都大田区西蒲田のJR蒲田駅前」辺りを設定しようと「緯度:35.562622、経度:139.715354」を設定したとします。これで取得される天気データは、登録されている地点のうち最も近い「都市ID:6419432、東京都大田区昭和島」のものとなるのですが、この地点そのものは「緯度:35.571671、経度:139.750000(東京モノレールの昭和島駅辺り)」となっています。まあ気になるほどの違いでもないのですが、設定画面に表示されている緯度と経度は、「入力された緯度と経度」であって、「参照している登録地点の緯度と経度」ではない、という事実を忘れないようにしてください。


天気情報の種類と時間属性


 天気情報は、種類(天気概況文、予想気温、予想降水量、...)と時間属性(ある時間帯、ある日)をもっています。「OpenWeatherMap」において、これらの意味するところは「ひとくち予報 in Feed」のものとは異なっていますので注意してください。

時間属性の種類


 『Glaeja』では「OpenWeatherMap」から最大5日間の天気データを取得します。この天気データが「どの時間のものか」を示すのが時間属性です。

「ある時間帯」の指定方法


 「OpenWeatherMap」では、一日を3時間ずつ8等分しており、その1つ1つを「時間帯」と呼びます。

 例えば、「%M%」という展開文字は「現時刻を含む時間帯の予想気温」を表示します。「%MM%」と展開文字を2つ並べると「現時刻を含む時間帯の次(3時間後)の時間帯の予想気温」が、また「%MMM%」と3つ並べると「現時刻を含む時間帯の次の次(6時間後)の時間帯の予想気温」が表示されます。このように、現時刻を含む時間帯を基準として、展開文字を複数個並べることで続く時間帯が指定されることになります。

「ある日」の指定方法


 例えば、「%m%」という展開文字は「現時刻を含む日(つまり今日)のすべての時間帯の予想気温」を表示します。表示は、「19.01/18.73/17.56/18.22/21.31/23.39/23.62/24.24」のように、各時間帯でのデータが「/(スラッシュ)」で区切られて表示されます。また、午前3時以降に今日のデータを表示させた場合などには、「--/--/17.56/18.22/21.31/23.39/23.62/24.24」のように、過ぎてしまった時間帯のデータは「--」で代替されます。

 これも「ある時間帯」と同様に、展開文字を複数個並べることで「次の日」「次の次の日」のすべての時間帯のデータを表示させることができます。


エスケープキャラクタと展開文字


 天気情報用エスケープキャラクタ「%」で囲まれた文字(展開文字)は、様々な天気情報に展開・表示されます。ここでは、天気情報ソースとして「OpenWeatherMap」を選んだ場合の展開文字について解説します。

「気温」に関する展開文字


Mある時間帯における予想気温


mある日のすべての時間帯における予想気温


 ある時間帯、およびある日のすべての時間帯の予想気温が「℃」単位で表示されます。気温データは「18.73」のように小数点以下2桁まで表示される場合がほとんどですが、1桁だったり整数で表示されることもあります。


Hある日における予想最高気温


Lある日における予想最低気温


 ある日における予想最高および最低気温が「℃」単位で表示されます。気温データは「19」のように整数で表示されます。

 これは、その日のすべての時間帯の予想気温のうちでの最高気温の切り上げ、および最低気温の切り下げを表示するのですが、「今日」の場合は少し特殊な処理をしています。「今日」の過ぎてしまった時間帯の予想気温は不明なため、真の意味での「予想最高気温」「予想最低気温」を知ることはできません。そこで、「明日」の「予想最高気温」「予想最低気温」となる時間帯と同じ時間帯に「今日」も「予想最高気温」「予想最低気温」となっていたはずと考え、その時間帯の予想気温を表示しようとします(その時間帯が過ぎてしまっていたなら「--」で代替します)。そのため、季節の変わり目や天気が急に変わるときなどは、なんか変な表示になることもありますが、気にしないでいただければ幸いです。


「湿度」に関する展開文字


Uある時間帯における予想湿度


uある日のすべての時間帯における予想湿度


 ある時間帯、およびある日のすべての時間帯の予想湿度が「%」単位で表示されます。湿度データは「93」のように整数で表示されます。


「降水量・降雪量」に関する展開文字


Rある時間帯における予想降水量・降雪量


rある日のすべての時間帯における予想降水量・降雪量


 ある時間帯、およびある日のすべての時間帯の予想降水量ないし降雪量が「mm」単位で表示されます。降水量・降雪量データは「1.04」のように小数点以下2桁まで表示される場合がほとんどですが、1桁だったり整数で表示されることもあります。


「気圧」に関する展開文字


Nある時間帯における予想気圧


nある日のすべての時間帯における予想気圧


 ある時間帯、およびある日のすべての時間帯の予想気圧が「hPa」単位で表示されます。降水量・降雪量データは「1015.96」のように小数点以下2桁まで表示される場合がほとんどですが、1桁だったり整数で表示されることもあります。


「雲」に関する展開文字


Dある時間帯における予想雲量


dある日のすべての時間帯における予想雲量


 ある時間帯、およびある日のすべての時間帯の予想雲量が「%」単位で表示されます。雲量とは「全天の何%が雲に覆われているか」を表す値です。雲量データは「68」のように整数で表示されます。


「風」に関する展開文字


Vある時間帯における予想風速


vある日のすべての時間帯における予想風速


 ある時間帯、およびある日のすべての時間帯の予想風速が「m/s」単位で表示されます。風速データは「2.32」のように小数点以下2桁まで表示される場合がほとんどですが、1桁だったり整数で表示されることもあります。


Wある時間帯における予想風向(角度表記)


wある日のすべての時間帯における予想風向(角度表記)


 ある時間帯、およびある日のすべての時間帯の予想風向が「北を0°とする角度」単位で表示されます。風向データは「213.505」のように小数点以下3桁まで表示される場合がほとんどですが、1桁だったり4桁だったりすることもあります。


Xある時間帯における予想風向(言語表記)


xある日のすべての時間帯における予想風向(言語表記)


 ある時間帯、およびある日のすべての時間帯の予想風向が「東北東」といった言語表記で表示されます。「ロケール」が日本語なら「東北東」、英語なら「ENE」のように表示されます。


「天気概況」に関する展開文字


Tある時間帯における天気概況文


tある日のすべての時間帯における天気概況文


 ある時間帯、およびある日のすべての時間帯の天気概況文が表示されます。「ロケール」によって表示される言語が異なります(詳細はこちらを参照ください)。


Bある時間帯における天気概況番号


bある日のすべての時間帯における天気概況番号


 ある時間帯、およびある日のすべての時間帯の天気概況番号が表示されます。この番号は「ひとくち予報 in Feed」のものとは異なる「OpenWeatherMap」独自の番号となっています(詳細はこちらを参照ください)。


Cある時間帯における天気カテゴリ


cある日のすべての時間帯における天気カテゴリ


 ある時間帯、およびある日のすべての時間帯の天気カテゴリが表示されます。この天気カテゴリの構造そのものは「ひとくち予報 in Feed」のものと同じなのですが、天気概況文が「ひとくち予報 in Feed」と「OpenWeatherMap」で異なっているため、対応する天気カテゴリも異なったものとなっています。詳細はこちらを参照ください。


その他の展開文字


p参照している地点の都市名


P参照している地点の国名


 参照している地点の「OpenWeatherMap」に登録されている都市名と国名が表示されます。これは「ロケール」の種類に依らず常に「英語表記」となります。


Q参照している地点の都市ID


 参照している地点の「OpenWeatherMap」に登録されている都市IDが表示されます。


Sある時間帯の開始日時


sある日のすべての時間帯の開始日時


 ある時間帯、およびある日のすべての時間帯の開始日時が「yyyyMMddHHmm」の形式で表示されます。


Eある時間帯の終了日時


eある日のすべての時間帯の終了日時


 ある時間帯、およびある日のすべての時間帯の終了日時が「yyyyMMddHHmm」の形式で表示されます。


A参照している地点の緯度


O参照している地点の経度


 参照している地点の「OpenWeatherMap」に登録されている緯度および経度が表示されます。

 位置指定に[緯度と経度]を用いた場合に、そこで入力された値が表示されるのではないことに注意してください。「%A%」「%O%」では、入力された緯度・経度に最も近い「OpenWeatherMap」登録地点の緯度と経度が表示されます。


天気概況文と番号の一覧


 以下のテーブルに、「OpenWeatherMap」で現れる天気概況番号(%B%)・概況文(%T%)・カテゴリ(%C%)の一覧を記す。


天気概況番号
%B%
天気カテゴリ
%C%
概況文 %T%
日本語英語
200315弱い雷雨thunderstorm with light rain
201315雷雨thunderstorm with rain
202315強い雷雨thunderstorm with heavy rain
210215弱い雷light thunderstorm
211215thunderstorm
212215強い雷heavy thunderstorm
221215ときどき雷ragged thunderstorm
230315弱い霧雨で雷を伴うthunderstorm with light drizzle
231315霧雨で雷を伴うthunderstorm with drizzle
232315強い霧雨で雷を伴うthunderstorm with heavy drizzle
300300弱い霧雨light intensity drizzle
301300霧雨drizzle
302300強い霧雨heavy intensity drizzle
310300弱い雨と霧雨light intensity drizzle rain
311300雨と霧雨drizzle rain
312300強い雨と霧雨heavy intensity drizzle rain
313300にわか雨と霧雨shower rain and drizzle
314300強いにわか雨と霧雨heavy shower rain and drizzle
321300にわか霧雨shower drizzle
500300小雨light rain
501300moderate rain
502300強い雨heavy intensity rain
503300非常に激しい雨very heavy rain
504300猛烈な雨extreme rain
511300雨氷freezing rain
520300弱いにわか雨light intensity shower rain
521300にわか雨shower rain
522300強いにわか雨heavy intensity shower rain
531213ときどきにわか雨ragged shower rain
600400小雪light snow
601400snow
602400強い雪heavy snow
611400凍雨sleet
612400にわか凍雨shower sleet
615413弱いみぞれlight rain and snow
616413みぞれrain and snow
620400弱いにわか雪light shower snow
621400にわか雪shower snow
622400強いにわか雪heavy shower snow
701200もやmist
711200smoke
721200煙霧haze
731200砂塵旋風sand, dust whirls
741200fog
751200降砂sand
761200降塵dust
762200降灰volcanic ash
771300スコールsqualls
781200竜巻tornado
800 100 快晴clear sky
801 100 晴れfew clouds
802 100 千切れ雲scattered clouds
803112雲がちbroken clouds
804200曇りovercast clouds



以上

5 件のコメント:

匿名 さんのコメント...

アプデが入ったのでまさかと思ったらそのまさかでした、ありがとうございます<(_ _)>

匿名 さんのコメント...

天気の「%c%」の方がイメージだと表示されないのですが、イメージに対応していないのでしょうか?

kanitawa さんのコメント...

当方では表示されるのですが……
「%C%」の大文字小文字を間違ってませんか?

匿名 さんのコメント...

大文字の方は表示されるのですが、小文字の方はイメージ非対応と言う事でしょうか?
上記の記述から、小文字の「%c%」だと、1日分の表示が可能と言う事なのかと思いまして…。

それと、翌日、2日後、3日後等の表記は今の所、ひとくち予報に切り替えるしか無いのでしょうか?

kanitawa さんのコメント...

> 小文字の「%c%」だと、1日分の表示が可能と言う事なのかと思いまして…

「イメージ」レイヤーの[ファイル...]のところに

・「%C%」と書いたら、その時間帯の天気に該当するアイコン画像が1つ表示されるので、
・「%c%」と書いたら、今日の全時間帯の各天気に該当するアイコン画像が複数並んで表示されるのではないか

とお考えになられていたのであれば、根本的に考え方が間違っています。
「イメージ」レイヤーは、そんな器用なことができるようには作られていません。


> 翌日、2日後、3日後等の表記は

「OpenWeatherMap」用の「%...%」では、

・(現在時刻から)24時間後(に相当する時間帯)、48時間後(に相当する時間帯)、72時間後(に相当する時間帯)

という記述なら可能です。