みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介するシリーズをお送りしています。
前回の記事はこちら。
マネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出すスクリプトを紹介しました。
ただ、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の請求書一覧のレスポンスに含まれるJSON
には、以下のようにmetaの配下から全ページ数を取得することができました。
{
…
"meta" : {
"total_count": 件数,
"total_pages": 全ページ数,
"current_page": 現在のページ数,
"per_page": 1ページあたりの件数
}
また、リクエストですが、以下のようにページ数を与えることができましたね。
てことは、初期値を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によるアクセスの初歩をお伝えしていきます!- はじめてのマネーフォワード請求書API~その概要とおおまかな手順
- マネーフォワード請求書APIへのアクセスをテストしてみよう!
- GAS用のマネーフォワード請求書APIアプリケーションを作成する手順
- GASでAPIを操作をする強い味方「OAuth2 for Apps Script」ライブラリとその導入
- GASでマネーフォワードクラウド請求書APIへの認証とアクセストークンの取得を行う方法
- OAuth2 for Apps Scriptライブラリを使ってサービスを作るスクリプトを解説
- OAuth2 for Apps Scriptライブラリはどうやって認証用URLを作成しているのか
- OAuth2 for Apps Scriptライブラリはどうやってアクセストークンを取得するのか
- GASではじめてのマネーフォワードクラウド請求書APIへリクエスト
- マネーフォワードクラウド請求書APIから請求書一覧の取得をテストしてみよう!
- マネーフォワードクラウド請求書APIによる請求書一覧のデータを読み取ってみよう!
- GASでマネーフォワード請求書の請求書一覧を取得するスクリプト
- GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法
- マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト