2022年8月20日土曜日

GAS で青果物卸売市場調査(日別調査)を自動取得してスプレッドシートに記録する。

青果物卸売市場調査(日別調査)のデータを自動取得してスプレッドシートに記録する GAS (Google Apps Script) を作成してみました。

元となるデータは農林水産省が公表しているものですが、(おそらく)国外からのアクセス制限が設けられているようで GAS で直接取得することができません(403 ERROR になります)。そこで cultivationdata.net の Web API を利用します。JSON 形式でデータを取得し、スプレッドシートに保存します。非常に便利ですねぇ(笑)。


・スプレッドシートの準備


1行目に見出しを作ります。A 列から H 列に「日付」「都市名」「品目コード」「産地コード」「数量 (Kg)」「価格 (円/Kg)」「対前日比数量 (%)」「対前日比価格 (%)」となります。

シート名は「data」としています。


・GAS スクリプトの作成


今回は「主要卸売市場計」の「野菜」から「生しいたけ」(品目名)の「総量」(産地名)を取得します。

function getWmrData() {
  let url = "https://api.cultivationdata.net/wmr?cc=0000&cat=v"; //「主要卸売市場計」「野菜」
 
  //JSONデータの取得
  let response = "";
  try {
    response = UrlFetchApp.fetch(url);
  } catch(e) {
    return response;
  }
  let data = JSON.parse(response.getContentText());

  if(data["Error"] == "都市のデータが見つかりませんでした。") {
    return
  }
  
  let wmr = [];

  //品目名「生しいたけ」
  //産地名「総量」
  wmr.push(data["Date"]); //日付
  wmr.push(data["CityName"]); //都市名
  wmr.push(data["生しいたけ"]["ItemCode"]); //品目コード
  wmr.push(data["生しいたけ"]["総量"]["ProductionAreaCode"]); //産地コード
  wmr.push(data["生しいたけ"]["総量"]["TradingVolume"]); //数量 (Kg)
  wmr.push(data["生しいたけ"]["総量"]["AveragePrice"]); //価格 (円/Kg)
  wmr.push(data["生しいたけ"]["総量"]["VolumeVersusPreviousDay"]); //対前日比数量 (%)
  wmr.push(data["生しいたけ"]["総量"]["PriceVersusPreviousDay"]); //対前日比価格 (%)

  return wmr;
}

function setWmrData() {
  const spreadsheet = SpreadsheetApp.openById("スプレッドシート ID");
  const sheet = spreadsheet.getSheetByName("data");
  let lastRow = sheet.getLastRow();
 
  if(getWmrData() != null) {
    //900行以上なら1行追加
    if(lastRow >= 900) {
      sheet.insertRows(lastRow + 1);
    }

    let wmrData = getWmrData();
    if(lastRow == 1) {
      sheet.getRange(lastRow + 1, 1, 1, 8).setValues([wmrData]);
    } else {
      let lastDate = sheet.getRange(lastRow, 1).getValue(); //前回の日付
      lastDate = Utilities.formatDate(lastDate, "JST", "yyyy/M/d");
      //日付が重複しなければスプレッドシートに入力
      if(wmrData[0] != lastDate) {
        sheet.getRange(lastRow + 1, 1, 1, 8).setValues([wmrData]);
      }
    }
  }
}

34行目の「スプレッドシート ID」を書き加えてください。


ちなみに、別のデータを取得したい場合は、2行目の「0000」「v」部分、及び23行目から28行目「生しいたけ」「総量」部分を書き換えてください。


・実行結果


トリガーを設定して毎日 setWmrData 関数を実行した結果が次の画像になります。8/14のデータが抜けているのは休市日のためです。



取得したデータの数量と価格を2軸の折れ線グラフにしたものが次の画像です。



いろいろ使えそうですね。


***

ということで、GAS による cultivationdata.net の Web API を利用した青果物卸売市場調査(日別調査)の自動取得方法でした。

青果物市況情報についても Web API がありますので似たような GAS で取得が可能です。

ご参考になれば幸いです。





・関連投稿
青果物卸売市場調査(日別調査)を JSON 形式で取得する Web API を作りました。