javascript - 尝试使用 Google Apps 脚本将图像上传到 Graph API 时如何解决“异常:超出限制”错误?
问题描述
我正在使用 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,我已经使用在线解码器检查了字节字符串以进行验证。
您对如何在发布请求中直接使用图像 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
),有时还提供内容类型(如果我们传递的不是 JavaScript 对象)。
如果要传递base64Encode
从 blob 获得的对象,则应将此 JSON 对象字符串化。
原始海报缺少的是传递有效负载,在我的贡献和他的工作之后,他最终通过编辑选项变量解决了这个问题,例如:
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify({"bytes": docImg,"name" : 'Test'})};
}
文档参考:类 UrlFetchApp
推荐阅读
- functional-programming - 有没有更好的功能方法来处理带有错误检查的向量?
- react-native - StackNavigation 道具未按预期工作
- android - 如何在选定的卡片视图上点击波纹和其他前景?
- wordpress - 强制 Woocommerce 按属性过滤以仅显示搜索词在标题中的属性
- audio - 处理坚持 pause() 不是一个函数,当它非常重要时
- python - 从图像中去除噪点
- google-cloud-platform - 从 Cloudfunctions 提交 Cloudbuild 作业时出错,如果
- string - 如何使用 VB6 获取此字符串的每一行
- sparql - 创建资源中三元组的 SPARQL CONSTRUCT 命令顺序
- functional-programming - 在 F# 中并行柯里化多个函数