我正在尝试使用Google脚本中的Facebook图形API来获取Facebook广告系列。
我有近5500个数据,我正在尝试每10分钟获取一次数据,并在电子表格中添加更新后的数据。
代码运行正常。但是经过2-3次迭代我得到了一个错误
UrlFetch failed because too much traffic is being sent to the specified URL
如果我再次与其他电子邮件分享我的Google脚本,则会在接下来的2-3次迭代中使用,然后再次失败。
我得到了一个解决方案,可以在从Previous Stackoverflow Question
获取数据时添加额外的选项但是在添加选项
之后{"useIntranet" : true}
我的请求超时问题。
还有其他解决方法可以解决此问题吗?我需要在一天内每10分钟获取一次数据。
答案 0 :(得分:3)
这不是您的通话问题,而是您正在拨打的电话数量。你可能需要减少一点。如您所见here,限制是每600秒(10分钟)拨打600电话。所以,取决于你取得什么,如何以及在什么数量,我觉得你的描述足以让我确信你能够做2-3次迭代的原因是因为在结束时第3个你已超过1个通话/秒率,它基本上是你从那里关闭。
我还建议您查看此page以获取与Facebook Graph API相关的更多限速信息。
答案 1 :(得分:0)
在使用代码后,我得到的是fb graph api的限制,例如每600秒(10分钟)600次调用。但是,从谷歌应用程序脚本调用fb graph api的限制要少得多。这就是为什么当我每10分钟使用jQuery Ajax加载数据时它工作正常但是当我使用
加载相同的数据时UrlFetchApp.fetch
在谷歌应用程序脚本中,它在一天内2-3次尝试后阻止了我。
因为限制是来自谷歌应用程序脚本的fb graph api,我试图调用其他api而不是fb graph api并且它有效,但它并没有阻止我。
所以我创建了一个节点js服务器,如: -
var express = require("express"),
app = express(),
cors = require('cors'),
bodyParser = require('body-parser'),
request = require('request');
app.use(cors());
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.get("/test",function(req,res){
res.send("Test success");
})
app.post('/getFbFeed', function(req, res) {
// Sending request to fb api using the request modules of node, the fb feed url is coming from
// the frontend as a request parameter.
request(req.body.url, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.send(body); // Send the response of the requested url to the frontend.
}
})
})
app.listen(process.env.PORT || 3000);
因此,此代码将从fb graph api加载数据,并且我将从google apps脚本发送fb graph api的url。
所以,在我写的谷歌应用程序脚本中
var options =
{
"method" : "post",
"payload" : {"url" : url}
};
// Sending post request to node js server with the fb feed url to load data as there is limit to load data from fb to google apps script.
response = UrlFetchApp.fetch("http://fbfeed-48431.onmodulus.net/getFbFeed",options);