Web 系アプリ開発のど素人が、チャレンジする WebAPI 連携日記の第 6 回です。
前回に続いて気象庁の天気予報でお天気マークを表示する作業をすすめます。今回はお天気マークの画像を取得します。
アイコンファイル
天気予報 を開きアイコン画像の URL を確認します。例えば、晴れのアイコンの場合は次のようになっており、ファイル名がわかります。
https://www.jma.go.jp/bosai/forecast/img/100.svg
このファイル名は、前回 JSON より取得した天気コードマスタ内にありましたね。これら情報を利用して画像ファイルをダウンロードするプログラムを作成しましょう。
ところで、ファイル名には2種類あり、昼と夜のアイコンとなっています。例えば、411 の「雪後晴」の場合は、411.svg と 811.svg となっており、アイコンは次の通りとなっています。
アイコンファイルのダウンロード
ダウンロードしたアイコンファイルは、天気コードマスタ内に添付することとし、次のように添付用のリッチテキストを用意します。
HTTP でファイルをダウンロードするので、以前作成した関数を使用します。ファイルサイズが万一 64 KB を越えても動作するよう、LotusScript の NotesHTTPRequest クラスを使用しない方法を使います。詳しくは以下を参照してください。
また、ダウンロードしたファイルを一時的に保存するため、Windows のテンポラリフォルダを利用します。フォルダ名の取得には、先日公開した関数を使用します。
Windows のテンポラリフォルダの取得
サンプルプログラム
天気コードマスタのアイコンを取得するためのエージェントを新規作成します。
まずはメインルーチンです。すべて天気コードマスタを取得するためのビュー vWeather に接続し、1件ずつ順に取得して処理しています。1マスタにつき2つのアイコンを取得するので、サブ関数 xSetIconFile で処理させています。
Option Declare Use "lsWindows" Use "lsHttpDownload" Sub Initialize Dim ns As New NotesSession Dim nuiw As New NotesUIWorkspace Dim nd As NotesDocument Dim ndb As NotesDatabase Dim nv As NotesView Dim i As Integer Set ndb = ns.CurrentDatabase Set nv = ndb.GetView("vWeather") '天気コードマスタ取得ビュー nv.AutoUpdate = False Set nd = nv.GetFirstDocument() While Not (nd Is Nothing) '昼のアイコン Call xSetIconFile(nd, "WeatherIcon_SVG", nd.WeatherFileName(0)) '夜のアイコン Call xSetIconFile(nd, "WeatherIcon2_SVG", nd.WeatherFileName2(0)) Call nd.Save(True, False) i = i + 1 Set nd = nv.GetNextDocument(nd) Wend MsgBox CStr(i) & " マスタのファイルを取得しました。" 'ビュー更新 Call nuiw.ViewRefresh() End Sub |
アイコンファイルをマスタ文書に添付する処理は次の通りです。Use したライブラリ内の関数を使用して、ダウンロードしたファイルをテンポラリフォルダに保存しています。添付が完了したらファイルは削除しています。
Function xSetIconFile(vnd As NotesDocument, ByVal vsFld As String, ByVal vsFN As String) Dim sURL As String Dim sFP As String Dim nrti As NotesRichTextItem 'アイコンのURL生成 sURL = "https://www.jma.go.jp/bosai/forecast/img/" & vsFN 'ファイルダウンロード sFP = GetWinTmpPath() & vsFN Call HttpDownload(sURL, sFP) 'フィールドに添付 Call vnd.RemoveItem(vsFld) Set nrti = vnd.CreateRichTextItem(vsFld) Call nrti.EmbedObject(EMBED_ATTACHMENT, "", sFP) 'ダウンロードしたファイルは削除 Kill sFP End Function |
実行結果
実行すると次のように各マスタ文書にアイコンファイルが添付されます。
アイコンをイメージリソースに登録
天気コードマスタは天気予報の種類を詳細に分類していますが、アイコン複数の天気コードで共通となっています。例えば、昼用にファイル名でカテゴライズしたビューを作成してみると複数の天気コードマスタに同じファイル名が割り当てられていることがわかります。
これで使用されているアイコンの種類がわかりますので、それぞれをイメージリソースに登録します。ノーツは現時点で SVG ファイルに対応していないので、インターネット上の変換サイトなどを利用して、PNG 形式に変換してからリソースに保存します。
本当であればこの処理も自動で行いたかったのですが、うまく変換できなかったので現時点では手作業としています。よい方法が見つかれば別途記事にしたいと思います。
前回 | 連載:つないでみよう | 次回 |
0 件のコメント:
コメントを投稿