お天気データサイエンスの過去データ配信でダウンロードURLの一覧をファイル出力することができるようになりました。
過去データ配信は、ダウンロードファイルが期間に応じて分割されることがあり、長期間になる場合はダウンロードボタンを何度もクリックする必要があって、正直ちょっと面倒だったのですが、この機能を使えば、コマンド等で自動的に取得することができるので非常に便利になりました。
スクリプト等による過去データの自動取得方法の例を紹介したいと思います。
※本稿執筆時点のサービス機能は今後変更する場合がありますので、最新の利用方法等をご確認ください。
管理画面からは「過去データ配信」のメニューで注文するデータを選択します。
データのページからは右側の過去データRequest取得申込ボタンをクリックします。
あとは画面に従って、データの期間を入力(データによっては入力不要)、確定ボタンをクリックして注文します。
すぐに申込み完了メールが届き、システムで準備が開始されます。
しばらくすると、準備完了メールが届き、準備状況ページからダウンロードすることができるようになります。
各データのダウンロードボタンをクリックすると、その期間のデータを圧縮したzipファイルをダウンロードできます。
ダウンロードURLの一覧ファイルは、上部にある「ファイル出力」ボタンをクリックすると、csvファイルとして取得できます。
表の2行目は内容部分の説明です。実際には、準備状況ページの一覧のうち、ダウンロード可能なデータ分だけ格納されます。ダウンロード可能なデータが無い場合は項目名だけ出力されます。
iconvやnkfを使って変換しましょう。
以下は、cutコマンドとawkコマンドの例です。項目名の「URL」行はgrepやawkの条件式で省いています。
csvモジュールでダウンロードURL一覧ファイルの1列目(配信履歴ID)と4列目(URL)を読み、保存ファイル名を「(配信履歴ID).zip」としています。
一覧ファイルで出力したダウンロードURLへのアクセスも、準備状況ページに表示されているダウンロード可能回数を消費します。また、大量のデータを一度にダウンロードできる分、保存するストレージやダウンロードURLの有効期限にはご注意ください。
過去データ配信は、ダウンロードファイルが期間に応じて分割されることがあり、長期間になる場合はダウンロードボタンを何度もクリックする必要があって、正直ちょっと面倒だったのですが、この機能を使えば、コマンド等で自動的に取得することができるので非常に便利になりました。
スクリプト等による過去データの自動取得方法の例を紹介したいと思います。
※本稿執筆時点のサービス機能は今後変更する場合がありますので、最新の利用方法等をご確認ください。
過去データ配信の基本的な使い方
過去データ配信は、管理画面もしくは各データの過去データ取得申込みボタンから注文できます。(有料会員のみ)管理画面からは「過去データ配信」のメニューで注文するデータを選択します。
データのページからは右側の過去データRequest取得申込ボタンをクリックします。
あとは画面に従って、データの期間を入力(データによっては入力不要)、確定ボタンをクリックして注文します。
すぐに申込み完了メールが届き、システムで準備が開始されます。
しばらくすると、準備完了メールが届き、準備状況ページからダウンロードすることができるようになります。
各データのダウンロードボタンをクリックすると、その期間のデータを圧縮したzipファイルをダウンロードできます。
ダウンロードURLの一覧ファイルは、上部にある「ファイル出力」ボタンをクリックすると、csvファイルとして取得できます。
ダウンロードURLの一覧ファイル
ダウンロードURLの一覧ファイルは以下の項目が出力されるようになっています。配信履歴ID | データ名 | 期間 | URL | 有効期限 |
---|---|---|---|---|
整数 | 例:TEXT-地上気象観測1分値JSON/XML | 例:2022年1月25日~2022年1月31日 | https://~ | 年月日時 |
過去データの自動取得方法(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
以下は、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
$ wget https://~ -O get.zip
または
$ curl -L https://~ -o get.zip
#!/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
過去データの自動取得方法(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')
csvモジュールでダウンロードURL一覧ファイルの1列目(配信履歴ID)と4列目(URL)を読み、保存ファイル名を「(配信履歴ID).zip」としています。
まとめ
過去データ配信の新機能、ダウンロードURL一覧ファイルを使ったデータ自動取得方法を紹介しました。長期間の過去データをご利用の場合はご参考ください。一覧ファイルで出力したダウンロードURLへのアクセスも、準備状況ページに表示されているダウンロード可能回数を消費します。また、大量のデータを一度にダウンロードできる分、保存するストレージやダウンロードURLの有効期限にはご注意ください。
この記事を書いた人
K.Sakurai
気象予報士/技術士(応用理学)/防災士
総合気象数値計算システムSACRA、データ提供システムCOSMOS及びお天気データサイエンスの開発に一から携わる。
WRF-5kmモデル、虹予報、虹ナウキャスト、1㎞メッシュ雨雪判別予測データ、2kmメッシュ推計日射量を開発。
趣味はバドミントンと登山。