KLWP・Yahoo!天気のRSS情報から天気と気温を抽出する

2021/05/01

klwp
KLWPで設定できる天気情報では、その精度に不満を感じる人は多いのではないでしょうか。天気はできるだけ正確性を求めたい情報なので、日本のYahoo!天気がウェブ上でRSS配信している「天気と気温」の情報を取得し、カスタマイズしやすいようにそれぞれを個別に抽出してみましょう。
また、抽出した天気名をMeteoアイコンに変換する例も紹介します。

Yahoo!天気からRSS情報を取得する

※ 追記:Yahoo!天気は、2022年3月末でRSS配信サービスを終了しています。

Yahoo!天気のRSS情報を取得するには、パソコンでYahoo!天気の専用ページ「提供RSS」にアクセスし、情報を取得したい地域を選択します。
スマホでアクセスした場合は、ブラウザ設定でパソコン版を表示させてください。

link Yahoo!天気 提供RSS

地域を選択した先で表示されるのが、RSS配信されているXMLファイル。
RSS情報を取得するためには、そのページの【 URL 】が必要になるのでコピーをしておいてください。
例えば、地域が「東京」の場合のURLは
https://rss-weather.yahoo.co.jp/rss/days/4410.xml
となり、「4410」の部分が地域により異なっています。

KLWPでRSS情報を表示する

Yahoo!天気のRSS情報を表示させるには、【 Web Get 】内の「RSSフィードの0番目の記事の内容」の数式を使用します。
$wg("cnet.com/rss/news/",rss,0,desc)$
デフォルトにあるこの数式のダブルクォーテーション内は例なので、先程コピーしたURLに置き換えます。その場合、「https://」は省いて記述。

「東京」の場合だと以下のようになります。
$wg("rss-weather.yahoo.co.jp/rss/days/4410.xml",rss,0,desc)$
これで「晴時々曇 - 21℃/13℃」というような天気と気温(最高気温/最低気温)の情報が取得できます。

数式内の「0」はXMLファイルの何番目の情報を取得するかを意味しており、数値を変えることで翌日や数日後の情報が取得できます。
また、「desc」は <description> ~ </description> 内を、これを「title」にすると <title> ~ </title> 内を取得します。


これで天気情報を取得表示できるようになりましたが、天気と気温の情報がひとつの文字列になっているので、そこから情報それぞれを個別に抽出します。

天気情報を分割して個別に抽出

取得した「晴時々曇 - 21℃/13℃」の文字列から、天気と気温を個別に抽出させるには、【 テキスト変換 】内にある以下の数式を使用して情報を分割します。
$tc(split,"SuperXOneXZed","X",1)$
デフォルトにあるこの数式は、文字列の中の「X」を境に分割し、2番目の部分の「One」を抽出するという一例。

取得した「晴時々曇 - 21℃/13℃」の文字列を見ると、「 - 」を境にして天気と気温を分割できるのがわかります。この場合、「-」ではなく前後の半角スペースを含めた「 - 」を境にするのがポイント。
これは、氷点下の気温で表記される「-」が、境にする文字に該当しないようにするためです。

天気を抽出する

天気の「晴時々曇」を抽出する数式。
$tc(split,wg("rss-weather.yahoo.co.jp/rss/days/4410.xml",rss,0,desc)," - ",0)$

気温を抽出する

気温の「21℃/13℃」を抽出する数式。最後の数値を「1」に変えるだけです。
$tc(split,wg("rss-weather.yahoo.co.jp/rss/days/4410.xml",rss,0,desc)," - ",1)$

気温をさらに分割する

気温の「21℃/13℃」は「/」により最高気温と最低気温に分割できます。数式にある最後の値が「0」で最高気温、「1」で最低気温を抽出。
以下は「0」なので最高気温が抽出されます。
$tc(split,tc(split,wg("rss-weather.yahoo.co.jp/rss/days/4410.xml",rss,0,desc)," - ",1),"/",0)$

天気をMeteoアイコンに変換

天気名を抽出できるので、それをKLWPにプリセットされているMeteoアイコンに対応させます。
しかし、Yahoo!天気の天気名には「のち、一時、時々」が含まれており、組み合わせが多いためMeteoアイコンでは種類がたりません。そのため、ひとつのアイコンに複数の天気を該当させる必要があります。

グローバル変数に天気抽出の数式を記述

まず、【 グローバル変数 】にタイトルを「weather」(例)とした【 テキスト 】を追加し、以下の天気を抽出するための数式を記述しておきます。
東京の場合は以下のようにします。
$tc(split,wg("rss-weather.yahoo.co.jp/rss/days/4410.xml",rss,0,desc)," - ",0)$

Meteoアイコンに変換する

アイテムに【 アイコンフォント 】を追加し、セットを「Meteo」にします。アイコンにチェックを入れ、数式エディタを有効にし以下の数式を記述します。
数式エディタには日本語を直接入力できないため、天気名を入力する場合はコピー&ペーストしてください。
$if( 
gv(weather)=晴れ|gv(weather)~=晴のち&ai(isday)=1,Sun, 
gv(weather)=晴れ|gv(weather)~=晴のち&ai(isday)=0,Moon, 
gv(weather)=曇り|gv(weather)~=曇のち,Cloudy2,
gv(weather)=雨|gv(weather)~=雨のち,Rainy2,
gv(weather)=雪|gv(weather)~=雪のち,Snowy3,
gv(weather)=晴一時曇|gv(weather)=晴時々曇|gv(weather)=曇一時晴|gv(weather)=曇時々晴&ai(isday)=1,Cloudy, 
gv(weather)=晴一時曇|gv(weather)=晴時々曇|gv(weather)=曇一時晴|gv(weather)=曇時々晴&ai(isday)=0,Cloud,
gv(weather)=晴一時雨|gv(weather)=晴時々雨|gv(weather)=曇一時雨|gv(weather)=曇時々雨|gv(weather)=雨一時晴|gv(weather)=雨時々晴|gv(weather)=雨一時曇|gv(weather)=雨時々曇,Rainy,
gv(weather)=晴一時雪|gv(weather)=晴時々雪|gv(weather)=曇一時雪|gv(weather)=曇時々雪|gv(weather)=雪一時晴|gv(weather)=雪時々晴|gv(weather)=雪一時曇|gv(weather)=雪時々曇,Snowy,
gv(weather)=雨一時雪|gv(weather)=雨時々雪|gv(weather)=雪一時雨|gv(weather)=雪時々雨, Snowshower,
None)$
上記数式では、太陽が描かれたアイコンは日の出日の入りの時刻を境に、夜間は「月」が描かれたアイコンへ変化するようにしてあります。
また、アイコンと天気名の割り当ては個人的イメージによるもので、詳細は以下のようになっています。

アイコン名天気名
Sun(Moon)晴、晴のち~
Cloudy2曇、曇のち~
Rainy2雨、雨のち~
Snowy3雪、雪のち~
Cloudy(Cloud)晴一時曇、晴時々曇、曇一時晴、曇時々晴
Rainy晴一時雨、晴時々雨、曇一時雨、曇時々雨、雨一時晴、雨時々晴、雨一時曇、雨時々曇
Snowy晴一時雪、晴時々雪、曇一時雪、曇時々雪、雪一時晴、雪時々晴、雪一時曇、雪時々曇
Snowshower雨一時雪、雨時々雪、雪一時雨、雪時々雨

まとめ

Yahoo!天気からRSSで天気情報を取得する方法、そして取得した情報の文字列から「天気」と「気温」それぞれを個別に抽出、さらに天気をMeteoアイコンに変換する方法までを紹介しました。
Yahoo!天気RSS情報は一日に複数回自動更新され、リアルタイムに近い情報を表示させることができるのでとても便利です。また、一週間分の情報があるので週間天気を作成するなど、個別にしたことでいろいろなカスタマイズが可能になると思います。天気を英語に変換したり、気温の「℃」を省いたりもできます。


また、ここでは例として地域を「東京」とした数式にしていますが、数式をコピペして使う場合は、URL部分の値(東京は4410)を自分の地域の値に変更するだけで使えます。その場合は取得したい地域のURLから値を確認してください。