javascript - 尝试使用 Google Apps 脚本将图像上传到 Graph API 时如何修复 "Exception: Limit Exceeded"错误?

标签 javascript facebook-graph-api google-apps-script facebook-marketing-api

我正在使用 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/

相关文章:

javascript - 如何防止 JavaScript 中的标签重叠

objective-c - Facebook 好友列表图 API

Facebook OAuth 错误 4 : API_EC_TOO_MANY_CALLS - Application request limit reached

facebook - 如何在没有FBML的情况下发送Facebook礼物?

javascript - 根据单元格值添加行 - Google 脚本

javascript - addEventListener 内存泄漏

javascript - Observables 的 Angular HttpClient 默认错误函数

javascript - 匹配2个字符串

google-apps-script - 如何转让 Google 电子表格的所有权并成为查看者

google-apps-script - 使用 UrlFetchApp 从 https ://discord. com 寻址端点时出现错误 (403)