我正在使用Facebook Graph API通过Google Apps脚本创建一个Facebook广告系列。
我需要将图片上传到我的Facebook广告帐户。我已经尝试过将图像字节用作Base64 UTF-8字符串,但是当我调用API时,我得到了:
例外:超出限制:URLFetch 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=' + 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,我已经使用在线解码器检查了字节字符串以进行验证。
您对在发布请求中直接使用图片网址有任何想法吗?
第二版代码:
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
),有时还要提供内容类型(如果我们传递的不是JavaScript对象)。
如果要传递base64Encode
从Blob获得的对象,则应对此JSON对象进行字符串化。
最初的海报所缺少的是传递有效载荷,在我的贡献和他的工作之后,他终于通过编辑options变量解决了这个问题,例如:
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify({"bytes": docImg,"name" : 'Test'})};
}
文档参考:类UrlFetchApp
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句