【GAS】GASでZaimAPIを操作する覚書
zaimAPI


GASからZaimAPIを操作する機会があったのですが、わかりづらかったので手順をメモ…
Zaim Developer Centerにアクセスし、開発者登録してログインもしておく
Zaim Developer Centerから自分のZaimの情報にアクセスするためのアプリケーションを作成する。

※「家計簿へのアクセスを永続的に許可する」にチェックを入れないと24時間ごとに認証が必要になる
作成した後に発行されるコンシューマ IDとコンシューマシークレットをコピーしておく
GASからZaimの情報を取得するにはOAuth認証が必要なので、ライブラリのOAuth1 for Apps Scriptを使用します
Google公式のLibraryでOAuth1で認証・認可を行うためのライブラリです。
取得したコンシューマIDとコンシューマシークレットをプロジェクトプロパティに設定して利用します。
var SP = PropertiesService.getScriptProperties();
var CONSUMER_KEY = SP.getProperty("CONSUMER_KEY");//取得したコンシューマID
var CONSUMER_SECRET = SP.getProperty("CONSUMER_SECRET");//取得したコンシューマシークレット;
/**
* Authorizes and makes a request to the Zaim API.
*/
function run() {
var service = getService();
if (service.hasAccess()) {
var url = 'https://api.zaim.net/v2/home/money';
var response = service.fetch(url, {
method: 'get'
});
var result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2));
} else {
var authorizationUrl = service.authorize();
Logger.log('次のURLを開いてZaimで認証したあと、再度スクリプトを実行してください。: %s',
authorizationUrl);
}
}
/**
* Reset the authorization state, so that it can be re-tested.
*/
function reset() {
var service = getService();
service.reset();
}
/**
* Configures the service.
*/
function getService() {
return OAuth1.createService('Zaim')
// Set the endpoint URLs.
.setAccessTokenUrl('https://api.zaim.net/v2/auth/access')
.setRequestTokenUrl('https://api.zaim.net/v2/auth/request')
.setAuthorizationUrl('https://auth.zaim.net/users/auth')
// Set the consumer key and secret.
.setConsumerKey(CONSUMER_KEY)
.setConsumerSecret(CONSUMER_SECRET)
// Set the name of the callback function in the script referenced
// above that should be invoked to complete the OAuth flow.
.setCallbackFunction('authCallback')
// Set the property store where authorized tokens should be persisted.
.setPropertyStore(PropertiesService.getUserProperties());
}
/**
* Handles the OAuth callback.
*/
function authCallback(request) {
var service = getService();
var authorized = service.handleCallback(request);
if (authorized) {
return HtmlService.createHtmlOutput('認証できました!このページを閉じて再びスクリプトを実行してください。');
} else {
return HtmlService.createHtmlOutput('認証に失敗');
}
}gasでrun()を実行してログを表示

表示されているURLをコピーしてアクセスします

認証画面が出てくるのでログイン

認証が完了したらスクリプトに戻って再度run()を実行
[20-05-11 18:08:46:993 PDT] ログ出力のサイズが大きすぎます。出力を切捨てます。 {
"money": [
{
"id": ○○○○,
"user_id": ○○○○,
"date": "2020-05-08",
"mode": "income",
"category_id": ○○○○,
"genre_id":
すると今度は認証画面ではなくzaimに登録されているデータがjsonで返ってきます