异常:服务在一天内被调用太多次:urlfetch
Exception: Service invoked too many times for one day: urlfetch
我在 Google 表格中创建了一个脚本,它运行良好,但过了一会儿我收到以下错误:
异常:服务在一天内被调用太多次:urlfetch
我想我一天调用了这个函数大约200-300次,我检查过它应该低于限制。
我读到我们可以使用缓存来避免这个问题,但不确定如何在我的代码中使用它。
function scrapercache(url) {
var result = [];
var description;
var options = {
'muteHttpExceptions': true,
'followRedirects': false,
};
var cache = CacheService.getScriptCache();
var properties = PropertiesService.getScriptProperties();
try {
let res = cache.get(url);
if (!res) {
// trim url to prevent (rare) errors
url.toString().trim();
var r = UrlFetchApp.fetch(url, options);
var c = r.getResponseCode();
// check for meta refresh if 200 ok
if (c == 200) {
var html = r.getContentText();
cache.put(url, "cached", 21600);
properties.setProperty(url, html);
var $ = Cheerio.load(html); // make sure this lib is added to your project!
// meta description
if ($('meta[name=description]').attr("content")) {
description = $('meta[name=description]').attr("content").trim();
}
}
result.push([description]);
}
}
catch (error) {
result.push(error.toString());
}
finally {
return result;
}
}
请问我如何使用这样的缓存来增强我的脚本?
var cache = CacheService.getScriptCache();
var result = cache.get(url);
if(!result) {
var response = UrlFetchApp.fetch(url);
result = response.getContentText();
cache.put(url, result, 21600);
答案:
您可以同时实施 CacheService
和 PropertiesService
,并且仅在指定的时间后再次检索 URL。
代码更改:
请注意,额外调用检索缓存和属性会减慢您的功能,尤其是,如果您这样做几百次。
由于缓存的值可以是 maximum of 100 KB,我们将使用 CacheService
来跟踪要检索的 URL,但是 PropertiesService
存储数据。
您可以这样编辑您的 try
区块:
var cache = CacheService.getScriptCache();
var properties = PropertiesService.getScriptProperties();
try {
let res = cache.get(url);
if (!res) {
// trim url to prevent (rare) errors
url.toString().trim();
var r = UrlFetchApp.fetch(url, options);
var c = r.getResponseCode();
// check for meta refresh if 200 ok
if (c == 200) {
var html = r.getContentText();
cache.put(url, "cached", 21600);
properties.setProperty(url, html);
var $ = Cheerio.load(html); // make sure this lib is added to your project!
// meta description
if ($('meta[name=description]').attr("content")) {
description = $('meta[name=description]').attr("content").trim();
}
}
result.push([description]);
}
}
catch (error) {
result.push(error.toString());
}
finally {
return result;
}
参考文献:
- Class CacheService | Apps Script | Google Developers
- Class Cache | Apps Script | Google Developers
- Class PropertiesService | Apps Script | Google Developers
相关问题:
- Service invoked too many times for one day: urlfetch
我在 Google 表格中创建了一个脚本,它运行良好,但过了一会儿我收到以下错误: 异常:服务在一天内被调用太多次:urlfetch
我想我一天调用了这个函数大约200-300次,我检查过它应该低于限制。
我读到我们可以使用缓存来避免这个问题,但不确定如何在我的代码中使用它。
function scrapercache(url) {
var result = [];
var description;
var options = {
'muteHttpExceptions': true,
'followRedirects': false,
};
var cache = CacheService.getScriptCache();
var properties = PropertiesService.getScriptProperties();
try {
let res = cache.get(url);
if (!res) {
// trim url to prevent (rare) errors
url.toString().trim();
var r = UrlFetchApp.fetch(url, options);
var c = r.getResponseCode();
// check for meta refresh if 200 ok
if (c == 200) {
var html = r.getContentText();
cache.put(url, "cached", 21600);
properties.setProperty(url, html);
var $ = Cheerio.load(html); // make sure this lib is added to your project!
// meta description
if ($('meta[name=description]').attr("content")) {
description = $('meta[name=description]').attr("content").trim();
}
}
result.push([description]);
}
}
catch (error) {
result.push(error.toString());
}
finally {
return result;
}
}
请问我如何使用这样的缓存来增强我的脚本?
var cache = CacheService.getScriptCache();
var result = cache.get(url);
if(!result) {
var response = UrlFetchApp.fetch(url);
result = response.getContentText();
cache.put(url, result, 21600);
答案:
您可以同时实施 CacheService
和 PropertiesService
,并且仅在指定的时间后再次检索 URL。
代码更改:
请注意,额外调用检索缓存和属性会减慢您的功能,尤其是,如果您这样做几百次。
由于缓存的值可以是 maximum of 100 KB,我们将使用 CacheService
来跟踪要检索的 URL,但是 PropertiesService
存储数据。
您可以这样编辑您的 try
区块:
var cache = CacheService.getScriptCache();
var properties = PropertiesService.getScriptProperties();
try {
let res = cache.get(url);
if (!res) {
// trim url to prevent (rare) errors
url.toString().trim();
var r = UrlFetchApp.fetch(url, options);
var c = r.getResponseCode();
// check for meta refresh if 200 ok
if (c == 200) {
var html = r.getContentText();
cache.put(url, "cached", 21600);
properties.setProperty(url, html);
var $ = Cheerio.load(html); // make sure this lib is added to your project!
// meta description
if ($('meta[name=description]').attr("content")) {
description = $('meta[name=description]').attr("content").trim();
}
}
result.push([description]);
}
}
catch (error) {
result.push(error.toString());
}
finally {
return result;
}
参考文献:
- Class CacheService | Apps Script | Google Developers
- Class Cache | Apps Script | Google Developers
- Class PropertiesService | Apps Script | Google Developers
相关问题:
- Service invoked too many times for one day: urlfetch