Web 系アプリ開発のど素人が、チャレンジする WebAPI 連携日記の第 7 回です。
気象庁の天気予報取得シリーズの最終回です。前回まででお天気アイコンの準備ができたので、いよいよ天気マークを表示します。完成すると、次のように天気予報が表示できます。
天気コードの取得
第 4 回 で気象庁の Web サイトから天気予報取得のサンプルコードを紹介しました。ただ、シンプルなコードにするため、天気の名称だけを取得していました。まずは、天気コードを取得するように修正します。
修正する個所は次の通りです。修正箇所のみを抽出して赤字で表示します。
Sub Initialize ・・・ Dim vCD As Variant ・・・ '大阪の天気予報を取得 sAreaCD = "270000" Call xGetForecast(sAreaCD, vCD, vWeather) End Sub |
Function xGetForecast(ByVal vsAreaCD As String, rvCD As Variant, rvWeather As Variant) ・・・ '明後日までの天気予報 Set je3 = jnav.GetFirstElement() Call xGetForecast_3Days(je3, rvCD, rvWeather) End Function |
"weatherCodes" というオブジェクト内に天気コードがありますので、それを取得して新設した変数にセットします。
Function xGetForecast_3Days(vje3Days As NotesJSONElement, rvCD As Variant, rvWeather As Variant) ・・・ If jeTmp.Type = Jsonelem_type_array Then '配列だが1つしか要素がない Set jaTmp = jeTmp.Value Set jeTmp = jaTmp.GetFirstElement() Set jobjTmp = jeTmp.Value '天気 CD Set jeTmp = jobjTmp.GetElementByName("weatherCodes") rvCD = xGetArray_String(jeTmp) '天気 Set jeTmp = jobjTmp.GetElementByName("weathers") rvWeather = xGetArray_String(jeTmp) End If End If End Function |
天気予報の表示
続いて天気予報を表示する機能をエージェントに追加します。
まず、表示する関数は次の通りです。新規文書を作成し、天気コードと天気名称をセットして、文書を表示するだけのシンプルなプログラムです。
Function xShowForecast_3Dyas(vvCD As Variant, vvWeather As Variant) Dim ndb As NotesDatabase Dim nd As NotesDocument Dim nuiw As New NotesUIWorkspace Dim i As Integer Set ndb = xns.CurrentDatabase Set nd = ndb.CreateDocument() nd.Form = "fForecast" For i = 0 To UBound(vvCD) Call nd.ReplaceItemValue("Days3_WeatherCode_" & CStr(i+1), vvCD(i)) Call nd.ReplaceItemValue("Days3_WeatherText_" & CStr(i+1), vvWeather(i)) Next Call nd.ComputeWithForm(False, False) Call nuiw.EditDocument(False, nd) End Function |
天気コードは Days3_WeatherCode_n 、天気の名称は Days3_WeatherText_n フィールドにセットします。n = 1 が今日、n = 2 が明日、n = 3 が明後日となります。
関数ができたらメインルーチンから関数をコールします。これでエージェントは完成です。
Sub Initialize ・・・ '大阪の天気予報を取得 sAreaCD = "270000" Call xGetForecast(sAreaCD, vCD, vWeather) '天気予報を表示 Call xShowForecast_3Dyas(vCD, vWeather) End Sub |
フォームの作成
続いて、天気予報を表示するフォームを作成します。3列の表を作成し、上記エージェントで作成されるフィールドを各列に配置し、3日分の天気を表示します。値はエージェントでセットするので作成時の計算結果で、式には "" をセットします。
エージェントでセットしていない Days3_WeatherIcon_n がイメージリソース名を保持するフィールドです。計算結果フィールドとして作成し、以下の式をセットします。この式は自身のフィールド名を利用して記述しているので n = 1 ~ 3 のすべてのフィールドで同じ式となります。
xFld := "Days3_WeatherCode_" + @RightBack(@ThisName; "_"); xWCD := @GetField(xFld); xSVG := @DbLookup("":""; "":""; "vWeather"; xWCD; "WeatherFileName"); @If(@IsError(xSVG); ""; @Left(xSVG; ".") + ".png" ) |
イメージリソースのファイル名は、@DbLookup を使用して、天気コードマスタから取得しています。今回は、昼用のアイコンだけを対象としています。
最後に天気アイコンの表示です。表の背景を@式で設定する機能を利用して作成しました。表の内側にカスケードの表を作成し幅や高さを設定し、罫線を 0 にします。
イメージのソースを計算結果に設定し、式にリソース名が入っているフィールド Days3_WeatherIcon_1 を記述します。この設定はフィールド内ではないので、列ごとにそれぞれのフィールド名をしています。
以上で完成です。エージェントを実行すると、その時点の天気を Web API から取得して、フォームに表示します。これを応用すればノーツのポータル画面にも天気予報が表示できますね。
前回 | 連載:つないでみよう | 次回 |
0 件のコメント:
コメントを投稿