OTENKI Data Science

TechBlog

K.Sakurai

過去データの自動ダウンロード方法について

お天気データサイエンスの過去データ配信でダウンロードURLの一覧をファイル出力することができるようになりました。
過去データ配信は、ダウンロードファイルが期間に応じて分割されることがあり、長期間になる場合はダウンロードボタンを何度もクリックする必要があって、正直ちょっと面倒だったのですが、この機能を使えば、コマンド等で自動的に取得することができるので非常に便利になりました。
スクリプト等による過去データの自動取得方法の例を紹介したいと思います。

※本稿執筆時点のサービス機能は今後変更する場合がありますので、最新の利用方法等をご確認ください。

過去データ配信の基本的な使い方

過去データ配信は、管理画面もしくは各データの過去データ取得申込みボタンから注文できます。(有料会員のみ)
管理画面からは「過去データ配信」のメニューで注文するデータを選択します。

データのページからは右側の過去データRequest取得申込ボタンをクリックします。

あとは画面に従って、データの期間を入力(データによっては入力不要)、確定ボタンをクリックして注文します。
すぐに申込み完了メールが届き、システムで準備が開始されます。
しばらくすると、準備完了メールが届き、準備状況ページからダウンロードすることができるようになります。
各データのダウンロードボタンをクリックすると、その期間のデータを圧縮したzipファイルをダウンロードできます。
ダウンロードURLの一覧ファイルは、上部にある「ファイル出力」ボタンをクリックすると、csvファイルとして取得できます。

ダウンロードURLの一覧ファイル

ダウンロードURLの一覧ファイルは以下の項目が出力されるようになっています。
配信履歴IDデータ名期間URL有効期限
整数例:TEXT-地上気象観測1分値JSON/XML例:2022年1月25日~2022年1月31日https://~年月日時
表の2行目は内容部分の説明です。実際には、準備状況ページの一覧のうち、ダウンロード可能なデータ分だけ格納されます。ダウンロード可能なデータが無い場合は項目名だけ出力されます。

過去データの自動取得方法(Linuxでwgetやcurlを使う場合)

ダウンロードURLの一覧ファイルは、文字コードがShift-JISなので、LinuxではUTF-8に変換した方が扱いやすいかと思います。
iconvやnkfを使って変換しましょう。
    # Shift-JISからUTF-8への変換
    $ iconv -f sjis -t utf8 ods_download_url.csv -o ods_download_url_utf8.csv
    または、
    $ nkf -w ods_download_url.csv > ods_download_url_utf8.csv
それでは、まずはファイルを1つダウンロードしてみましょう。後のスクリプトの理解のため、コマンドでURL(4列目)を抜き出してみます。
以下は、cutコマンドとawkコマンドの例です。項目名の「URL」行はgrepやawkの条件式で省いています。
    # ダウンロードURLの一覧ファイルのURLを抜き出す。
    $ cut -d , -f 4 ods_download_url_utf8.csv | grep -v URL
    または、
    $ awk -F , '($4 != "\"URL\"") {print $4}' ods_download_url_utf8.csv
表示されたURLの一つをwgetやcurlコマンドでアクセスし、出力ファイルを指定すればダウンロードできます。
    $ wget https://~ -O get.zip
    または
    $ curl -L https://~ -o get.zip
自動取得用のスクリプトには、ここまでの流れを書き、URLをループさせれば良さそうですが、ここでは配信履歴IDでループさせて、保存するファイル名に配信履歴IDを使う例を示します。
    #!/bin/bash

    # Shift-JISからUTF-8への変換
    nkf -w ods_download_url.csv | sed "s/\"//g" > ods_download_url_utf8.csv # 「"」をsedコマンドで抜いています。

    for id in $(cut -d , -f 1 ods_download_url_utf8.csv | grep -v "配信履歴ID") ;do # 配信履歴IDでループ

      url=$(awk -F , '($1 == '${id}') {print $4}' ods_download_url_utf8.csv) # URLを入力

      wget ${url} -O ${id}.zip # ファイルダウンロード

    done
スクリプトは、nohupでバックグラウンド実行すれば、端末を閉じてもダウンロードを継続できますね。

過去データの自動取得方法(Pythonを使う場合)

Windows環境ではPythonを使ってみました。Linuxでも同様のコードを利用できると思います。
    # -*- coding: utf-8 -*-
    import requests
    import csv

    # ファイルダウンロード関数
    ## url: ダウンロードURL
    ## file_name: 保存ファイル名
    def download_file(url, file_name):
         r = requests.get(url, stream=True)
         if r.status_code == 200:
             with open(file_name, 'wb') as f:
                 f.write(r.content)

    if __name__ == '__main__':
         with open('ods_download_url.csv') as f: # ダウンロードURL一覧ファイル読み込み
             reader = csv.reader(f)
             header = next(reader) # ヘッダ部読み飛ばし
             for row in reader: # 1行ずつ処理
                 print(row[3] + ' to ' + row[0] + '.zip')
                 download_file(row[3], row[0] + '.zip')
ファイルのダウンロードはrequestsモジュールを使っています。
csvモジュールでダウンロードURL一覧ファイルの1列目(配信履歴ID)と4列目(URL)を読み、保存ファイル名を「(配信履歴ID).zip」としています。

まとめ

過去データ配信の新機能、ダウンロードURL一覧ファイルを使ったデータ自動取得方法を紹介しました。長期間の過去データをご利用の場合はご参考ください。
一覧ファイルで出力したダウンロードURLへのアクセスも、準備状況ページに表示されているダウンロード可能回数を消費します。また、大量のデータを一度にダウンロードできる分、保存するストレージやダウンロードURLの有効期限にはご注意ください。

この記事を書いた人

K.Sakurai

気象予報士/技術士(応用理学)/防災士 
総合気象数値計算システムSACRA、データ提供システムCOSMOS及びお天気データサイエンスの開発に一から携わる。
WRF-5kmモデル、虹予報、虹ナウキャスト、1㎞メッシュ雨雪判別予測データ、2kmメッシュ推計日射量を開発。
趣味はバドミントンと登山。

前の記事へ 【データ解説】MSM-GPVおよびMSMガイダンスの予報時間延長
記事一覧へ
次の記事へ 250mレーダーデータの指定領域抽出方法
  1. お天気データサイエンスHOME
  2. 技術情報
  3. 技術ブログ
  4. 過去データの自動ダウンロード方法について