@nazomikanです。
本記事はLIFULL Advent Calenderその2の9日目の記事です。
ほとんどメモに近い内容ですが誰かのお役に立てば。
通常、Google Driveでファイルを作成するとき、DriveApp.createFile
とかで作るのが普通なんだけど、DriveApp
でDrive内の特定ディレクトリに対する書き込みの指定ができない。
よくそれでつらみを感じてたんだけどDriveのREST APIを叩けばいけるらしい。
それでUrlFetchApp
でがんばろうとしたところ、どうやらそんなことしなくてもいけるらしい
The advanced services in Apps Script allow experienced developers to connect to certain public Google APIs with less set-up than using their HTTP interfaces. They work much like Apps Script's built-in services — for example, they offer autocomplete, and Apps Script handles the authorization flow automatically — but are not enabled by default.
To see which Google APIs are available as advanced services, look for the "Advanced Google Services" section in the Reference. If you want to use a Google API that isn't available as an advanced service, just connect to it like any other external API.
Advanced Google Servicesを有効にすればいいらしい。
リソース > Googleの拡張サービス...
使いたいAPIを無効からONにする(必要であればAPI Console側も許可する)
これをするとDriveのREST APIを提供するDrive
オブジェクトが使えるようになるのでこれのDrive.Files.insert
に親ディレクトリを指定して実行すると特定ディレクトリに作ったファイルを吐き出すことができる。
function exportJSON(fileName, obj) {
var parentDir = 'some directory id'
, blob = Utilities.newBlob('', MimeType.PLAIN_TEXT, fileName + '.json')
;
blob.setDataFromString(JSON.stringify(obj, null, ' '), 'utf-8');
Drive.Files.insert({
title: String(fileName) + '.json',
parents: [{id: parentDir}],
mimeType: MimeType.PLAIN_TEXT
}, blob)
}
// jsonの生成
exportJSON('hogehoge', {a: {b: 1}});
REST API他にもいっぱいあるのでこれで全能感に包まれますね。