Google Sheets脚本在从Google Books API获取数据时返回429错误
我创建了一个Google表格,在单元格A2输入一本书的ISBN,希望在点击一个与函数getBookData() 关联的按钮后,将书名返回到单元格B2。然而,我的脚本总是在以下位置崩溃:
var response = UrlFetchApp.fetch(url);
并给出以下429错误:Exception: Request failed for https://www.googleapis.com returned code 429。截断的服务器响应:{ "error": { "code": 429, "message": "Quota exceeded for quota metric 'Queries' and limit 'Queries per day' of service 'books.googleapis.... (use muteHttpExceptions option to examine full response)
这是怎么回事?它并没有陷入循环。如果我查看执行数据,它只有在我按下按钮启动函数时才会执行。所以我不确定我是如何超出查询限制的。我尝试了静默异常,但那样获取的内容就没有返回值,因此就没有数组可用于提取书名。
完整的函数代码在此:
const API_URL = "https://www.googleapis.com/books/v1/volumes?country=US";
function getBookData() {
var looker = SpreadsheetApp.getUi();
var response = looker.alert("Oooo", "Should we look up this book?", looker.ButtonSet.YES_NO);
if (response == looker.Button.YES) {
var activeSheet = SpreadsheetApp.getActiveSheet();
var bookISBN = activeSheet.getRange("A2").getValue();
looker.alert("bookISBN: " +bookISBN);
var url = API_URL + "&q=isbn:" + bookISBN;
var response = UrlFetchApp.fetch(url);
var results = JSON.parse(response);
var book = results.items[0];
var title = (book["volumeInfo"]["title"]);
activeSheet.getRange("B2").setValue(title);
}
}
解决方案
尝试创建一个API Key,并将其添加到查询参数中。
(你需要一个Google Cloud项目)
- 首先,启用它
- 然后进入APIs与服务,点击“创建凭据” -> API密钥
3.将作用域限定为Books API
4.复制密钥。记住——密钥是一个秘密。我不熟悉你们的Google文档的确切架构,但如果URL对查看者可见,请注意你把文档分享给了谁。(即使不可见,也要小心。我不清楚可能产生的费用/成本。)
5.只需把密钥附加到请求的URL上
js
const API_URL = "https://www.googleapis.com/books/v1/volumes?KEY=<enter_key_here>&country=US";