見出し画像

【CoreInk】天気の表示をする【UIFlow】(前編)

CoreInkをUIFlowを使ってプログラミングします。UIFlow等の設定はこちら

今回はボタンを押したときに、その時間から直近の天気を表示させるプログラミングをします

こちらを参考にしました

やりたいこと

ボタンMID押下で今後12時間の3時間周期天気を表示する

どうやって?

・OpenWeatherMapというサイトから天気を取得
 ・JSONファイルで取得するらしい
・画像で表したい

OpenWeatherMapでAPI Key取得

こちらにアクセスします

画像1

画像2

このあとは、キャプチャ忘れてしまいました。

API Keyは下記です

画像3

下記のアドレスにアクセスしてみます
[API Key]は自分のアカウントのAPI Key

https://api.openweathermap.org/data/2.5/weather?q=[都市名],jp&units=metric&lang=ja&appid=[API Key]

すぐには取得できませんでした。
数分後にAPI Keyが適用されるようです

このように表示されました

{"coord":{"lon":136.9064,"lat":35.1815},"weather":[{"id":801,"main":"Clouds","description":"薄い雲","icon":"02n"}],"base":"stations","main":{"temp":6.86,"feels_like":-1.27,"temp_min":5.56,"temp_max":9,"pressure":1015,"humidity":61},"visibility":10000,"wind":{"speed":8.75,"deg":340},"clouds":{"all":20},"dt":1612709633,"sys":{"type":1,"id":8009,"country":"JP","sunrise":1612648014,"sunset":1612686369},"timezone":32400,"id":1856057,"name":"名古屋市","cod":200}

ちょっと見にくいですね chrome拡張のJSONViewを使用

画像4

3時間周期の12時間先までの予報を取得

先程のURLの「weather」を「forecast」にすると予報になる

https://api.openweathermap.org/data/2.5/forecast?q=[都市名],jp&units=metric&lang=ja&appid=[API Key]

画像5

           ︙

画像6

・ロンドン基準の時刻なる +9時間すれば日本の時間
・5日分の天気が出てくる

cnt=4をURLに追加すると3時間毎のデータ4つ分になるので、12時間後までの3時間周期の天気予報となる

https://api.openweathermap.org/data/2.5/forecast?q=[都市名],jp&units=metric&lang=ja&cnt=4&appid=[API Key]

JSONデータの詳細

[ ]

↑に囲まれているのはリスト

{ }

↑に囲まれているのはプロパティ群

list  //リスト 3時間周期の#0~
 list.dt  //予報時刻UTCフォーマット
 list.main  //温度湿度など
 list.weather  //天気情報
 list.clouds.all //雲の量%
 list.wind  //風向風量など
 list.pop  //降水確率
 list.rain  //降水量 降らないときは取得なし
 list.snow    //積雪量 降らないときは取得なし
 list.sys.pod  //昼か夜か(d:昼 n:夜)
 list.dt_txt  //予報時刻ISOフォーマット
city.name  //都市名

以上のようです 一部省略

CoreInkに表示させる

高度なブロックのHTTPを使います

画像8

URLを入れて、successにラベルを入れる
・リストはリストブロックでテキストを取得
・プロパティ群はマップブロックでテキストを取得

画像9

画像10

時刻の取得方法

2021-02-07 18:00:00

の「18」のみ必要です 更に日本時間にするために「9」を足さなければいけません

テキストブロックの指定文字を抜き取るブロックを使います

画像11

これで時間2桁を取得できるが、テキストなので9時間を足すことができません。
テキストを数値に変換するブロックが見当たらなかったので、コード実行ブロックを使いました

dt = int(dt)

また、足して24を超えたものは24を引く必要があります。

できたのが、これ

画像11

画像14

これで、一つ分の天気予報が取得で言いました。

4つ分の天気予報を画面に表示させる

まずは画面のラベル位置
横に200pxなので、50pxずつ均等に並べました
単位も入れたかったが、狭いのでやめました

画像12

ブロックはsuccessの中でループカウントしてみます。
ラベルは場合分けにします。

画像13

画像15

やっぱり単位ほしいな。
小さい画像を入れるのもありかな。

前編終わり

長くなったので、一旦終わり
次回は天気アイコンを表示とボタン押下での取得
アイコン表示は大変そうだな。


後編作ったので、リンクです
なかなかのブロック数になりました。


この記事が気に入ったらサポートをしてみませんか?