kintoneからファイルをダウンロードしてGoogle Documentに書き込む

kintoneの添付ファイルフィールドに保存したファイルをダウンロードして、Google Documentに書き込む方法のまとめです。

# はじめに

今回は下記の元記事をベースに、ファイルダウンロードとGoogle Documentに書き込む箇所を追記しています。
[Google Apps ScriptからOAuth 2.0でkintone APIを利用する](https://developer.cybozu.io/hc/ja/articles/360024788071)

# コード

元記事のコードと違う部分のみ下記に載せておきます。

```javascript
function getService() {
  'use strict';
  const prop = PropertiesService.getScriptProperties(); // 固定値はプロパティストアから取得
  const subDomain = prop.getProperty('SUBDOMAIN');
  const clientId = prop.getProperty('KINTONE_OAUTH_CLIENT_ID');
  const clientSecret = prop.getProperty('KINTONE_OAUTH_CLIENT_SECRET');
  return OAuth2.createService('kintone')
    .setAuthorizationBaseUrl(`https://${subDomain}.cybozu.com/oauth2/authorization`)
    .setTokenUrl(`https://${subDomain}.cybozu.com/oauth2/token`)
    .setClientId(clientId)
    .setClientSecret(clientSecret)
    .setCallbackFunction('authCallback')
    .setPropertyStore(PropertiesService.getUserProperties())
    .setScope('k:app_record:read k:file:read'); // Kintone APIのスコープに k:file:read を追加
}
```

```javascript
function createAndSendDocument(accessToken) {
  'use strict';
  const prop = PropertiesService.getScriptProperties();
  const subDomain = prop.getProperty('SUBDOMAIN');
  var appUrl = `https://${subDomain}.cybozu.com/k/v1/record.json?app=103&id=2`;
  var appUrlFile = `https://${subDomain}.cybozu.com/k/v1/file.json`;
  var doc = DocumentApp.create('Hello, world!');

  // kintoneからレコード取得
  function fetchRecord(url, token){
    return new Promise(resolve => {
        var response =  UrlFetchApp.fetch(url,
                       {
                         headers: {
                           Authorization: 'Bearer ' + token
                         }
                       }
                     )
        var result = JSON.parse(response.getContentText());
        resolve(result);
      })
  }

  // kintoneからファイルをダウンロードする
  function fetchFile(url, token, fkey){
    return new Promise(resolve => {
        var options = {
          'headers': {
            'Authorization': 'Bearer ' + token
          },
          'muteHttpExceptions': true
        };
        try {
          var response =  UrlFetchApp.fetch(`${url}?fileKey=${fkey}`, options);
          resolve(response);
        }
        catch (error) {
          console.log('error =>', error);
        }
      })
  }

  fetchRecord(appUrl, accessToken) // レコード取得
  .then(result => {
    var subject = doc.getName();
    doc.getBody().appendParagraph(subject + '\r\n' + result.record.message.value);
    return fetchFile(appUrlFile, accessToken, result.record.file.value[0].fileKey); // ファイルダウンロード
  })
  .then(result => {
    var blob = Utilities.newBlob(result.getContent());
    doc.getBody().appendParagraph(result.getContentText());
    doc.getBody().appendImage(blob); // ダウンロードしたファイルをGoogle Documentに書き込み
  })
  .catch(e => {
    console.log('error =>', e);
  });

}
```

# kintoneレコード
<img width="296" alt="スクリーンショット 2020-08-10 21.39.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/cb1fc385-82dc-b3d0-2adb-7ab0524e16ae.png">

# Google Document
<img width="894" alt="スクリーンショット 2020-08-10 21.44.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/42eecd9d-f33a-92cf-26c7-7d3bc2d17483.png">


# 参考

* https://developer.cybozu.io/hc/ja/articles/202166180
* https://developers.google.com/apps-script/reference/url-fetch
* https://developers.google.com/apps-script/reference/document
* https://github.com/gsuitedevs/apps-script-oauth2
* https://developers.google.com/apps-script/reference/utilities