Taskerで天気予報を取得しKLWPで表示する
HTC J Oneの頃からKLWPを使用していますが、Galaxyになって性能+バッテリーの面で安心して使えるようになったため、常用しています。
天気予報もKLWPだけで取得して表示できるので便利ではあるのですが、精度が残念ではありませんか?自分は当初、KLWP単独で天気を取得して表示していたのですが、あまりに外れることが多く、見るときはYahooなどを参照するので困りはしませんがなんだかなぁ、と思っていました。どうせ別アプリで天気を確認するなら壁紙で表示しておく意味がないwww
そこで検索していたところ、下記のサイトを見つけ、参考に作成してみました。
KLWPでこのように表示しています。真ん中の白い部分です。
ウィジェットでもいいじゃないかというようなつまらないデザインですみませんw
現状は以下のような感じのTaskで使用しています。
KLWPに変数を渡すところが多いのでとても長く見えますねw
配列とか使うべきなのか・・・
上から順に、実施している内容を記載してみます。
- HTTP GET
Server Portに下記URLを指定(下記は例で東京都のものです)
http://weather.yahoo.co.jp/weather/jp/13/4410.html
Yahooの天気予報にアクセスして、現在の天気予報画面を取得します。
参考にさせていただいたサイト様ではOutput Fileを指定しているようですが、特に必要ないと思ったので出力していません。 - Variable Seatch Replace
Variable:%HTTPD
Search:http://i.yimg.jp/images/weather/general/forcast/size75/.*"
Store Matches In:%Tenki
Searchで探して一致した部分をStore Matches Inで指定した変数に格納します。
.*については正規表現で、改行以外のすべてに一致するときとなります。 - Variable Search Replace
Variable:%HTTPD
Search:high[^0-9]*-?[^0-9]+
Store Matches In:%TempHigh
予想最高気温を格納します。書いてて思いましたが、この検索文は意味がない部分が含まれるかも、、、なぜhighの後を0-9以外にしたのか、覚えていません。。w「-?」は、マイナスの気温になっても対応できるようにしたものです。 - Variable Search Replace
Variable:%TempHigh1
Search:.*>
Replace Matches:(チェックON)
Replace With:(空白)
Replace Matchesにチェックを入れ、Replace Withを空白にすることで、検索してマッチした部分を削除する、ということになります。3までの処理で、℃の手前まで抽出できています。数値の前はタグを閉じる記号になっていますので、すべての文字が対象、かつ最後が「>」である部分を検索しています。 - Variable Search Replace
Variable:%TempHigh2
Search:.*>
Replace Matches:(チェックON)
Replace With:(空白)
Variable Search Replaceで見つかった部分は見つかった数だけの変数が生成されて格納されます。1画面中に該当する最高気温部分は2箇所だけなので、変数が2つ使用されます。なので、1,2と両方を使用すると、今日・明日の天気、ということになります。 - Variable Search Replace
Variable:%HTTPD
Search:low[^0-9]*-?[^0-9]+
Store Matches In:%Templow
変数のlowが小文字なのは気にしないでくださいww適当に作ってるからこういうことやってしまいます。 - Variable Search Replace
Variable:%Templow1
Search:.*>
Replace Matches:(チェックON)
Replace With:(空白) - Variable Seach Replace
Variable:%Templow2
Search:.*>
Replace Matches:(チェックON)
Replace With:(空白) - Variable Search Replace
Variable:%Tenki1
Search:http://i.yimg.jp/images/weather/general/forcast/size75/.*" border="0" alt="
Replace Matches:(チェックON)
Replace With:(空白)
2にて、今日と明日の天気予報がそれぞれ%Tenki1、%Tenki2に格納されています。その内容から、アドレス部分を削除します。 - Variable Search Replace
Variable:%Tenki1
Search:"
Replace Matches:(チェックON)
Replace With:(空白) - Variable Search Replace
Variable:%Tenki2
Search:http://i.yimg.jp/images/weather/general/forcast/size75/.*" border="0" alt="
Replace Matches:(チェックON)
Replace With:(空白)
9と同様です - Variable Search Replace
Variable:%Tenki2
Search:"
Replace Matches:(チェックON)
Replace With:(空白)
10と同様です。 - Variable Search Replace
Variable:%HTTPD
Search:http://i.yimg.jp/images/weather/general/forecast/size75/.*.gif
Store Matches In:%Gazo
天気予報の画像のURLを取得します。今日のものはGazo1、明日のものはGazo2に格納されることになります。本当は天気予報の内容を解析して、独自のアイコン表示まで行きたいのですが手が(頭が)回っていません・・・ - Variable Search Replace
Variable:%HTTPD
Search:\d+月\d+日\([月火水木金土日]\)
Store Matches In:%TenkiDay
表示している天気が何日のものかを取得しています。すべての数字が1文字以上と月、すべての数字が1文字以上と日、( 月~日 のいずれか )という部分を検索しています。 - Variable Search Replace
Variable:%HTTPD
Search:\d+月\d+日.*発表
Store Matches In:%TenkiGetTime
変数名は微妙なところですが、天気予報の発表された時間を取得しています。これって結構大事な気がして・・・(KLWPでも表示しています) - 16~26はKLWPに変数の内容を渡しています。
最後の27は以下の内容です。
Variable Set
Name:%TenkiAccessTime
To:%DATE %TIME
変数TenkiAccessTimeに、タスクが実行されたときの日付と時間を格納します。
これは何にも渡していません。TaskerのVARS画面で、いつデータを取得しに行ったかを確認するための、デバッグ用です。天気予報が更新されていないときに、いつのタイミングで更新しに行ったかを見たいためです。データが取れなくても更新されてしまうので、エラーのときの処理を足さねばなりませんが・・・
以上です。設定が多くて面倒ですが、1度作ってしまえばあとは放置できる内容かと思います。天気アイコンを入れ替えたいですが、今は13の工程で取得した画像のアドレスをKLWPに渡して直接表示しています。ダメかな・・・