農林水産省が公開している「青果物市況情報」及び「青果物卸売市場調査(日別調査)」の CSV ファイルを取得する GAS (Google Apps Script) を作りました。
元データのサイトは国外からのアクセスが制限されているようで、GAS から直接データの取得をすることができません。
そこで、cultivationdata.net で公開している市況等 Web API からデータを取得します。もちろん無料。トリガー設定により毎日自動で取得することも可能です。
ちなみに、cultivationdata.net の市況等 Web API は先日作り直しまして、レスポンス速度がだいぶ改善しました。
以下、GAS のコードです。まるっとコピペして数カ所書き換えればお使いいただけます。
▼ 青果物市況情報の CSV ファイルを自動取得する GAS
function getMcCsv() {
//// cultivationdata.net より CSV ファイルを取得
const mc = "市場コード"; // 市場コード
const cat = "種別"; // 種別
const url = "https://api.cultivationdata.net/mcdata?mc=" + mc + "&cat=" + cat + "&type=csv";
// CSVデータの取得
let response = "";
try {
response = UrlFetchApp.fetch(url);
} catch(e) {
return response;
}
let data = response.getContentText(); // CSV データ
let arr = Utilities.parseCsv(data); // 配列化
// 取得ファイルのチェック
if(arr[0][0] == "市場のデータが見つかりませんでした。") { // 市場のデータが見つかりませんでした。
return
}
// 取得した CSV ファイルの日付を取得
let dt = Utilities.formatDate(new Date(arr[1][0]), 'JST', 'yyyyMMdd');
//// ファイルの保存
const folderId = "フォルダ ID"; // 保存先フォルダ ID
// 最新の取得済みファイルの日付を取得
const files = DriveApp.getFolderById(folderId).getFiles(); // 既存ファイル一覧
let latest_dt = "";
if(files.hasNext() != false) {
let files_dt= [];
while(files.hasNext()) {
files_dt.push([files.next().getName().replace(mc + "_" + cat + "_", "").replace(".csv", "")]);
}
files_dt.sort(function(a, b) {return b[0] - a[0]});
latest_dt = files_dt[0][0]; // 最新の日付
}
// 未取得ファイルであれば保存
if(dt == latest_dt) { // 取得済みファイル
return
} else {
// 出力先のフォルダとファイル名
const fileName = mc + "_" + cat + "_" + dt + '.csv'; // 出力するファイル名
// ファイルの保存
const charset = "utf-8"; // 文字コード
const contentType = 'text/csv'; //コンテンツタイプ
const blob = Utilities.newBlob('', contentType, fileName).setDataFromString(data, charset); // Bolb作成
DriveApp.getFolderById(folderId).createFile(blob); // 保存
}
}
市場コード及び種別は「青果物市況情報API説明書」を参照してください。
フォルダ ID は Google ドライブ内の CSV ファイルの保存先フォルダの ID になります。当該フォルダを開いた際の URL の末尾部分の英数字になります(https://drive.google.com/drive/folders/ここの部分)。
▼ 青果物卸売市場調査(日別調査)の CSV ファイルを自動取得する GAS
function getWmrCsv() {
//// cultivationdata.net より CSV ファイルを取得
const cc = "都市コード"; // 都市コード
const cat = "種別"; // 種別
const url = "https://api.cultivationdata.net/wmr?cc=" + cc + "&cat=" + cat + "&type=csv";
// CSVデータの取得
let response = "";
try {
response = UrlFetchApp.fetch(url);
} catch(e) {
return response;
}
let data = response.getContentText(); // CSV データ
let arr = Utilities.parseCsv(data); // 配列化
// 取得ファイルのチェック
if(arr[0][0] == "都市のデータが見つかりませんでした。") { // 都市のデータが見つかりませんでした。
return
}
// 取得した CSV ファイルの日付を取得
let dt = Utilities.formatDate(new Date(arr[1][0]), 'JST', 'yyyyMMdd');
//// ファイルの保存
const folderId = "フォルダ ID"; // 保存先フォルダ ID
// 最新の取得済みファイルの日付を取得
const files = DriveApp.getFolderById(folderId).getFiles(); // 既存ファイル一覧
let latest_dt = "";
if(files.hasNext() != false) {
let files_dt= [];
while(files.hasNext()) {
files_dt.push([files.next().getName().replace(cc + "_" + cat + "_", "").replace(".csv", "")]);
}
files_dt.sort(function(a, b) {return b[0] - a[0]});
latest_dt = files_dt[0][0]; // 最新の日付
}
// 未取得ファイルであれば保存
if(dt == latest_dt) { // 取得済みファイル
return
} else {
// 出力先のフォルダとファイル名
const fileName = cc + "_" + cat + "_" + dt + '.csv'; // 出力するファイル名
// ファイルの保存
const charset = "utf-8"; // 文字コード
const contentType = 'text/csv'; //コンテンツタイプ
const blob = Utilities.newBlob('', contentType, fileName).setDataFromString(data, charset); // Bolb作成
DriveApp.getFolderById(folderId).createFile(blob); // 保存
}
}
3行目「都市コード」、4行目「種別」、26行目「フォルダ ID」を書き換えてください。
市場コード及び種別は「青果物卸売市場調査(日別調査)API説明書」を参照してください。
フォルダ ID は Google ドライブ内の CSV ファイルの保存先フォルダの ID になります。当該フォルダを開いた際の URL の末尾部分の英数字になります(https://drive.google.com/drive/folders/ここの部分)。
▼ トリガー設定について
今回作成した GAS は、新しいデータが追加された場合のみ CSV ファイルの取得を行います。休場日で更新がない日には取得しません。そのため、トリガーは毎日に設定してしまって問題ありません(毎重複して取得はしません)。
データの取得先となる市況等 Web API は16時頃に更新されるので、設定時間はそれ以降とします。
![詳解! Google Apps Script完全入門 [第3版]](https://m.media-amazon.com/images/I/51FYffSOBcS._SL160_.jpg)
詳解! Google Apps Script完全入門 [第3版]
by SimpleImageLink
***
これで、都度ポチポチやってファイルを取得する手間を省けます。無駄な手間はコツコツ省いていきましょう。
一つひとつはわずか数分、数秒だとしても、塵も積もれば山となります。
生み出した真水のような時間は、何にでも自由に使うことができます。
青果物市況情報を JSON 形式で取得する Web API を作りました。(更新:CSV 形式での取得も可能になりました)
青果物卸売市場調査(日別調査)を JSON 形式で取得する Web API を作りました。(更新:CSV 形式での取得も可能になりました)
Twitter (@nkkmd) 日々更新中です。
