我正在使用 Facebook Graph API使用 Google Apps 脚本创建 Facebook 广告事件。
我需要将图片上传到我的 Facebook 广告帐户。我已经尝试使用图像字节作为 Base64 UTF-8 字符串,但是当我调用 API 时,我得到:
Exception: Limit Exceeded: URLFetch URL Length.
基本上,字符串太长了。
我正在使用以下代码:
function uploadTest2() {
var image_id = 'blabla';
var image_blob = DriveApp.getFileById(image_id).getBlob();
var input = image_blob.getBytes();
var docImg = Utilities.base64Encode(input);
var account_id = '1111111111111';
var facebookUrl =
'https://graph.facebook.com/v7.0' +
'/act_' + account_id +
'/adimages?bytes=' + docImg +
'&access_token=' + TOKEN;
Logger.log(facebookUrl);
//var encodedFacebookUrl = encodeURI(facebookUrl);
var options = {
'method' : 'post'
};
var response = UrlFetchApp.fetch(facebookUrl, options);
var results = JSON.parse(response);
Logger.log(response);
}
图像不超过5MB,我已经使用在线解码器检查了字节字符串以验证它。
您知道如何在 post 请求中直接使用图像 URL 吗?
第二版代码:
function uploadTest2() {
var image_id = 'blabla';
var image_blob = DriveApp.getFileById(image_id).getBlob();
var input = image_blob.getBytes();
var docImg = Utilities.base64Encode(input);
var account_id = '1111111111111';
var facebookUrl =
'https://graph.facebook.com/v7.0' +
'/act_' + account_id +
// '/adimages?bytes=' + encodedImage +
// '&access_token=' + TOKEN;
'/adimages?access_token=' + TOKEN;
Logger.log(facebookUrl);
//var encodedFacebookUrl = encodeURI(facebookUrl);
var options = {
'method' : 'post',
'payload' : image_blob
};
var response = UrlFetchApp.fetch(facebookUrl, options);
var results = JSON.parse(response);
Logger.log(response);
}
最佳答案
为了使用 UrlFetchApp.fetch()
发出图像的 POST 请求,您必须提供方法、有效负载(即您想要POST
的正文)和有时是内容类型(如果我们传递的不是 JavaScript 对象)。
如果您想传递从 blob 获取的 base64Encode
对象,您应该将此 JSON 对象字符串化。
原始海报缺少的是传递有效负载,在我的贡献之后,他们最终通过编辑选项变量解决了问题,例如:
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify({"bytes": docImg,"name" : 'Test'})};
}
文档引用:Class UrlFetchApp .
关于javascript - 尝试使用 Google Apps 脚本将图像上传到 Graph API 时如何修复 "Exception: Limit Exceeded"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62998153/