[GAS][会計freee]レコードの開始値(オフセット値)を操作しよう

freee

どうも。つじけ(tsujikenzo)です。このシリーズでは 「会計freeeで100件以上の取引を取得しよう」 ということで全3回でお送りします。今日は2回目です。

前回のおさらい

前回は、「会計freeeで100件以上の取引を取得しよう」 の1回目として 「複雑な処理は関数を切り分けよう」 をお届けしました。

[GAS][会計freee]100件以上の取引を取得しよう
どうも。つじけ(tsujikenzo)です。このシリーズでは 「会計freeeで100件以上の取引を取得しよう」 ということで全3回でお送りします。今日は1回目です。新しいシリーズのようですが、先日の「会計freeeAPIを使って残高確...

今回は、「レコードの開始値(オフセット値)を操作しよう」 をお届けします。

アジェンダ

  1. リファレンスとリクエストURL
  2. whileを使った可変offset

リファレンスとリクエストURL

会計freeeから取引を取得するさい、異なる目的ごとに都度サーバーへアクセスすると、その分サーバーに負担をかけることになります。

できれば、取得した取引をGASやスプレッド上で振り分けるなど、サーバーへのアクセスは1度だけにしたいものです。

その心構えは素晴らしいのですが、会計freeeのAPIリファレンスを確認すると、「一度に取得できる最大取引数は100件」とあります。

100件以上の取引を全件取得できるように、処理を自動化してみましょう。

開始日と終了日

リクエストURLのパラメータには、[開始日]と[終了日]プロパティがあります。日時の範囲を指定してレコードを取得できます。

limit

デフォルトでは、取得するレコードのlimitは20件ですが、最大[3000]を指定できます。

const requestUrl = `https://api.freee.co.jp/api/1/deals?company_id={事業所ID}&start_issue_date=${startIssueDate}&end_issue_date=${endIssueDate}&limit=200`;

offset

リクエストURLのパラメータには、[offset(オフセット)]という、 取得レコードの開始値プロパティ があります。

100件以上のレコードがある場合は、0~99、100~199、200~299のように、100件ずつ取得できそうです。※offsetは0(ゼロ)始まりに注意が必要です。

総レコード数の取得

取引(deals)のエンドポイントでは、最終取得レコードに到達すると、総レコード数を含む [meta]プロパティ を発行します。※1

[meta]プロパティには、[total_count]プロパティ が含まれており、整数で、総レコード数を格納しています。

(※1 個人的な憶測です。違っていたら公式さんごめんなさい。)

「期間範囲」「最大取得レコード数」「オフセット値」という3つの素材が揃いましたので、Loopを回してみましょう。

whileを使った可変offset

「期間範囲」は固定でいいと思います。全件取得なので、1年分でも構いませんし、1か月分でも構いません。

//リクエストURLに必要な開始日と終了日
const startIssueDate = '2021-01-01';
const endIssueDate = '2021-12-31';

「総レコード数」を取得するために、別途、1件のみレコードを取得して、総レコード数を変数に格納しておきます。

//総レコード数を確認するためのリクエストURL(limit=1がポイント)
const requestUrl = `https://api.freee.co.jp/api/1/deals?company_id=2606452&start_issue_date=${startIssueDate}&end_issue_date=${endIssueDate}&limit=1`;

//HTTPリクエストをリクエストURLに送信する
const response = UrlFetchApp.fetch(requestUrl, params);

//JSONオブジェクトに変換
const jsonObj = JSON.parse(response);

//総レコード数
const totalCount = jsonObj['meta']['total_count']; //例:2456

offset値を準備して、while文で回します。

先に完成したコードをお伝えします。

let offset = 0;

//全レコードを取得する
while (offset < totalCount) {

    const requestUrl = `https://api.freee.co.jp/api/1/deals?company_id=2606452&start_issue_date=${startIssueDate}&end_issue_date=${endIssueDate}&limit=100&offset=${offset}`;

    //HTTPリクエストをリクエストURLに送信する
    const response = UrlFetchApp.fetch(requestUrl, params);

    //スプレッドシートへ出力
    setAllDeals_(response);

    //一度に取得できるlimitが100件なのでoffsetも100ずつcountUpする
    offset += 100;

    //3秒待機
    Utilities.sleep(3000);

  }

  console.log('レコードはこれ以上ありません');

while文は 条件式がtrueであり続ける限りLoop処理を行う 構文です。

offset値が総レコード数を越えるまで、Loopを行います。

const totalCount = 2456;
let offset = 0;
while(offset < totalCount){
  //処理
  offset += 100;
}

スプレッドシートへの出力は、次回お届けします。

setAllDeals_(response);

まとめ

以上で、「レコードの開始値(オフセット値)を操作しよう」 ということで「期間範囲」「最大取得レコード数」「オフセット値」をお届けしました。

特に、[limit]プロパティを1にして、総レコード数を含む [meta]プロパティ[total_count]プロパティ を取得したのは、特徴的だったかと思います。

次回は、「スプレッドシートへ出力する関数」 をお届けします。

このシリーズの目次

[GAS][会計freee]100件以上の取引を取得しよう
1. [GAS][会計freee]複雑な処理は関数を切り分けよう
2. [GAS][会計freee]レコードの開始値(オフセット値)を操作しよう
3. [GAS][会計freee]スプレッドシートへ出力する関数

タイトルとURLをコピーしました