マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト

spreadsheet

photo credit: gonzalo_ar Work done via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介するシリーズをお送りしています。

前回の記事はこちら。

GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法
GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介をするシリーズです。今回は、GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法です。

マネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出すスクリプトを紹介しました。

ただ、1回のリクエストで取得できる請求書の数は100件までなんですよね…

ということで、今回はマネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプトにしていきます。

では、行ってみましょう!

スポンサーリンク

前回までのおさらい

さて、前準備として、マネーフォワードクラウド請求書APIのアプリケーションの作成、OAuth2ライブラリの導入とそれによる認証、アクセストークンの取得は完了しているものとします。

まだの方は、この記事あたりからシリーズを参考におさらいしてくださいね。

さて、前回紹介したスクリプトはこちらでした。

function getBillings() {

  const accessToken = getMFInvoiceService_().getAccessToken();

  const baseUrl = 'https://invoice.moneyforward.com/api/v2/billings';
  const params = {
    method: 'get',
    headers: {
      accept: 'application/json',
      Authorization: 'Bearer ' + accessToken
    }
  };
  
  const requestUrl = baseUrl;
  const response = UrlFetchApp.fetch(requestUrl, params); 
  
  const values = [];  
  const billings = JSON.parse(response.getContentText());
  const {data, meta} = billings;
  
  for (const billing of data) {
    const {id, attributes} = billing;
    const {office_name, partner_name, title, total_price, sales_date, due_date} = attributes;
    const record = [id, office_name, partner_name, title, total_price, sales_date, due_date];
    values.push(record);
  }
  
  SpreadsheetApp.getActiveSheet().getRange(1, 1, values.length, values[0].length).setValues(values);
}

そこそこ長いですね。

これで、スプレッドシートにマネーフォワードクラウド請求書の請求書一覧を書き出すことができます。

ただし、100件まで。

そうなんです、以下記事でお伝えしているとおり、100件を超えて取得するには、必要なページの回数だけリクエストをする必要があるのでした。

マネーフォワードクラウド請求書APIによる請求書一覧のデータを読み取ってみよう!
GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介をするシリーズです。今回は、マネーフォワードクラウド請求書APIによる請求書一覧のデータを読み取っていきます。

今回は、その部分を改善していきます。

全ページを取得するためのアルゴリズム

では、マネーフォワードクラウド請求書から全件の請求書データを取得するためのアルゴリズムについて考えていきましょう。

さて、マネーフォワードクラウド請求書APIの請求書一覧のレスポンスに含まれるJSON
には、以下のようにmetaの配下から全ページ数を取得することができました。

{
  …
  "meta" : {
    "total_count": 件数,
    "total_pages": 全ページ数,
    "current_page": 現在のページ数,
    "per_page": 1ページあたりの件数
  }

また、リクエストですが、以下のようにページ数を与えることができましたね。

https://invoice.moneyforward.com/api/v2/billings?page=[page]

てことは、初期値をpage=1として、total_pagesに到達するまでループをすればよいですね。

ループ周りのアルゴリズムとしては以下のようになりますね。

  • page=1とする
  • 繰り返し
    • ページ数pageについてリクエスト
    • レスポンスから必要データと取り出して二次元配列valueにプッシュ
    • pageがtotal_pageに到達してるならブレーク
    • pageを1増やす

これで良さそうです。

全件の請求書データをスプレッドシートに書き出すスクリプト

以上をもとに、全件の請求書データをスプレッドシートに書き出すスクリプトがこちらです。

function getBillings() {

  const accessToken = getMFInvoiceService_().getAccessToken();

  const baseUrl = 'https://invoice.moneyforward.com/api/v2/billings';
  const params = {
    method: 'get',
    headers: {
      accept: 'application/json',
      Authorization: 'Bearer ' + accessToken
    }
  };
  
  const values = [];  

  let page = 1;
  while (true) {
    const requestUrl = baseUrl + '?page=' + page;
    const response = UrlFetchApp.fetch(requestUrl, params);

    const billings = JSON.parse(response.getContentText());
    const {data, meta} = billings;
    const {total_pages, current_page} = meta;
        
    for (const billing of data){      
      const {id, attributes} = billing;
      const {office_name, partner_name, title, total_price, sales_date, due_date} = attributes;
      const record = [id, office_name, partner_name, title, total_price, sales_date, due_date];
      values.push(record);
    }
    
    if (total_pages <= current_page) break;
    page++;
  }
  
  SpreadsheetApp.getActiveSheet().getRange(1, 1, values.length, values[0].length).setValues(values); 
}

このスクリプトを実行すると、以下のようにスプレッドシートに全件の請求書が書き出されました。

全ての請求書データをスプレッドシートに取得

まとめ

以上、マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプトについてお伝えしました。

マネーフォワードクラウド請求書APIでできることは、これ以外に山程あります。

ぜひ、このシリーズで得た知見を使って、必要な他の操作も試してみてくださいね。

連載目次:【初心者向け】GASでマネーフォワード請求書API

マネーフォワード請求書APIを使用することで、GASからマネーフォワード請求書のデータを取得したり、操作をしたりすることが可能です。このシリーズでは、そのはじめの一歩として、マネーフォワード請求書APIとは何か?またGASによるアクセスの初歩をお伝えしていきます!
  1. はじめてのマネーフォワード請求書API~その概要とおおまかな手順
  2. マネーフォワード請求書APIへのアクセスをテストしてみよう!
  3. GAS用のマネーフォワード請求書APIアプリケーションを作成する手順
  4. GASでAPIを操作をする強い味方「OAuth2 for Apps Script」ライブラリとその導入
  5. GASでマネーフォワードクラウド請求書APIへの認証とアクセストークンの取得を行う方法
  6. OAuth2 for Apps Scriptライブラリを使ってサービスを作るスクリプトを解説
  7. OAuth2 for Apps Scriptライブラリはどうやって認証用URLを作成しているのか
  8. OAuth2 for Apps Scriptライブラリはどうやってアクセストークンを取得するのか
  9. GASではじめてのマネーフォワードクラウド請求書APIへリクエスト
  10. マネーフォワードクラウド請求書APIから請求書一覧の取得をテストしてみよう!
  11. マネーフォワードクラウド請求書APIによる請求書一覧のデータを読み取ってみよう!
  12. GASでマネーフォワード請求書の請求書一覧を取得するスクリプト
  13. GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法
  14. マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト
タイトルとURLをコピーしました