以下是我使用 Google Cloud Functions 的方法。我认为 OAuth 不太适合,因为云函数通常在无人值守的情况下运行。幸运的是有服务帐户,用于机器对机器通信。
1. 在您的云项目中创建一个服务帐户
2. 保存服务帐户密钥
在步骤 1 中,JSON 格式的密钥文件已下载到您的计算机上。将其保存到您的项目目录中并重命名credentials.json
.
3. 创建 API 密钥
4. 保存API密钥
将步骤 3 中的 API 密钥复制并保存在名为api_key.json
在你的项目目录中。它应该看起来像这样:
{
"key": "<PASTE YOUR API KEY HERE>"
}
5. 授予电子表格对服务帐户的访问权限
与步骤 1 中创建的服务帐户电子邮件共享电子表格。
6. 单元格 Google Sheets API
这是我的代码,每次调用云函数时都会在电子表格中附加一行。
const {google} = require('googleapis');
exports.reply = (req, res) => {
var jwt = getJwt();
var apiKey = getApiKey();
var spreadsheetId = '<PASTE YOUR SPREADSHEET ID HERE>';
var range = 'A1';
var row = [new Date(), 'A Cloud Function was here'];
appendSheetRow(jwt, apiKey, spreadsheetId, range, row);
res.status(200).type('text/plain').end('OK');
};
function getJwt() {
var credentials = require("./credentials.json");
return new google.auth.JWT(
credentials.client_email, null, credentials.private_key,
['https://www.googleapis.com/auth/spreadsheets']
);
}
function getApiKey() {
var apiKeyFile = require("./api_key.json");
return apiKeyFile.key;
}
function appendSheetRow(jwt, apiKey, spreadsheetId, range, row) {
const sheets = google.sheets({version: 'v4'});
sheets.spreadsheets.values.append({
spreadsheetId: spreadsheetId,
range: range,
auth: jwt,
key: apiKey,
valueInputOption: 'RAW',
resource: {values: [row]}
}, function(err, result) {
if (err) {
throw err;
}
else {
console.log('Updated sheet: ' + result.data.updates.updatedRange);
}
});
}
希望这可以帮助!