インターネットの情報を活用する(最新気象情報取得)

サンプルソフト(最新気象情報取得)

前へ    メニューに戻る     次へ

気象庁のHPで最新アメダス情報を表示するページがあります。

このデータをExcelに取り込んで見ましょう。

M6_1.png (21839 バイト)

下のURLの中の赤字の部分が地点コードで、ここを替えるといろいろな地点の情報を得ることができます。

http://www.jma.go.jp/jp/amedas_h/today-11016.html?areaCode=000&groupCode=10

M6_2.png (51785 バイト)

今回は全道のデータを一括して取得します。

横方向には今日の1時から24時までのデータを入れていきます。

早速デザインモードにして「データ読込」ボタンをダブルクリックして、ソースを見てみましょう。

M6_3.png (31896 バイト)

ソースは意外とシンプルです。赤色の部分で地点コードを替えています。

For I = 4 To 157
  strURL = "http://www.jma.go.jp/jp/amedas_h/today-" & Range("A" & I) & ".html?areaCode=000&groupCode=10"
  InDt = getjson(strURL) ' HTMLデータをダウンロードする

getjson()はHTMLソースを取得するプロシージャーで、標準モジュールに入っています。

URLを渡すとHTMLのコードが帰ってきます。

M6_4.png (18388 バイト)

javascripによってデータを読み込せていますが、この部分はカットアンドへーストで使ってください。

APIを使っ使う場合はこちらになる。こちらの方が早く、制限が少ない。(暗号化レベルが深くてもダウンロード可能)

M6_9.png (26761 bytes)

こちらはバイナリデータのダウンロードもあり、出力はファイである。インポート用のnetデータ取得.basを使う。

サンプルソフト「インターネットからのタイル地図のダウンロード(ランタイム不要バージョン)」を参照

これらを使うには参照設定で「Microsoft Script Contorol 1.0」を追加する必要があります。

liv.png (34338 bytes)

HTMLコードは下記のようになっています。このコードから規則性を探して、特定のデータを抜き出します。

M6_5.png (12369 バイト)

「St = InStr(InDt, ">時刻</td>") 」をで大まかなデータ開始位置を求めます。

InStr 関数は、指定した文字列 を検索し、最初に見つかった文字位置をかえします。

M6_6.png (52531 バイト)

アメダスデータは、地点によってデータの取得項目が違うため、「CxDt(0) = "気温": CxDt(1) = "降水量"・・・・: CxDt(7) = "気大」を使ってデータ項目を確認します。

それが下記のルーチンです。

For J = 0 To 7 '観測項目を確認
 Skip(J) = 0
 If InStr(St, InDt, CxDt(J)) > 0 Then
  Cx(J) = 1 'データの有無(使っていない)
  CxN = CxN + 1 '有効データ数
 Else
  Cx(J) = 0 'データの有無(使っていない)
  Skip(CxN) = Skip(CxN) + 1 'データがないセルのスキップ数
 End If
Next J

次に各時間のデータ開始位置を検索します。時間データは「<td class="time left">1</td>」のように入っています。

「time left">1</td>」を検索するには、「"」を含むため文字列指定との見分けが付きません。このため、「"」はChr(&H22)で表します。

Hst = InStr(St, InDt, "time left" & Chr(&H22) & ">" & H & "</td>")

M6_7.png (7214 バイト)

データは「middle">2.7</td>」赤字で示した中にあるため、

dtL(0) = InStr(Hst, InDt, "middle" & Chr(&H22) & ">") 'データ開始位置
dtL(1) = InStr(dtL(0), InDt, "</td>") 'データ終了位置

上記式で位置を割り出し、Mid関数を使ってデータを取り出します。

Dt = Mid(InDt, dtL(0) + 8, dtL(1) - (dtL(0) + 8)) 'データだけを取り出す

M6_8.png (52435 バイト)

取り出したデータは先ほどのデータスキップ数などを用いて、セルに保存していきます。

Cells(I, (H - 1) * 8 + 3 + N + Skip(N)) = Dt 'セルへデータ書き込み

自動出力するHPは、規則性があるので自動取得しやすくなっています。

 

サンプルソフト(最新気象情報取得)

前へ    メニューに戻る     次へ