【问题标题】:Bitly API V4 in Google Apps Script: getting errors when trying to call clicks summaryGoogle Apps 脚本中的 Bitly API V4:尝试调用点击摘要时出错
【发布时间】:2021-05-31 15:05:44
【问题描述】:

我对 Apps 脚本相当陌生,这是我第一个使用 API 的自定义函数。提前感谢您的建议。

我一直在按照此代码将 Bitly 集成到 Google 表格中。 https://gist.github.com/misterhay/38a500545ce7abc75b875f33f01c9f51

他们为 ShortenBitly 提供的代码可以完美运行,但是我无法让 ExpandBitly 或 Stats 函数正常工作。

下面是我的 BitlyStats 代码,以及我得到的错误代码。

 * Retrieves the final URL from a bitlink  
 *
 * @param {string} the bitly link
 * @return {string} the total clicks
 * @customfunction
 */

function bitlyStats(bitlink) {
  var bitlink = 'bitlink'
  Logger.log(bitlink)
  var accessToken = 'MYTOKEN';
  var fetchUrl = 'https://api-ssl.bitly.com/v4/bitlinks/' + bitlink + '/clicks/summary';
  Logger.log(fetchUrl)
  var headers = {
    'Authorization': 'Bearer '+ accessToken,
    'Content-Type': 'application/json',
  };
  var params = {
    'method' : 'get',
    'headers' : headers,
    'muteHttpExceptions' : true
  };
  var response = UrlFetchApp.fetch(fetchUrl, params);
  Logger.log(response.getContent());
  var clickCount = JSON.parse(response.getContent()).total_clicks;
  return clickCount;
}

这是错误信息;

SyntaxError: Unexpected token ,在 JSON 中的位置 2 bitlyStats@Code.gs:26

第 25 行的日志读取 [52.0, 48.0, 52.0, 32.0, 112.0, 97.0, 103.0, 101.0, 32.0, 110.0, 111.0, 116.0, 32.0, 102.0, 111.0, 117.0, 110.0, 1] 1 p>

【问题讨论】:

    标签: javascript api google-apps-script bitly


    【解决方案1】:

    修改点:

    • HTTPResponse 类的getContent() 返回字节数组。我认为这是您的问题的原因。
    • 当您要检索文本值时,请使用getContentText()
    • 而且,关于您当前的[52.0, 48.0, 52.0, 32.0, 112.0, 97.0, 103.0, 101.0, 32.0, 110.0, 111.0, 116.0, 32.0, 102.0, 111.0, 117.0, 110.0, 100.0, 10.0] 值,当这个字节数组被解码时,它是404 page not found。我认为您的问题的原因是由于'https://api-ssl.bitly.com/v4/bitlinks/' + bitlink + '/clicks/summary' 端点中的var bitlink = 'bitlink'
      • 在这种情况下,作为测试用例,请使用您的示例缩短 URL(如 bit.ly/###)作为 bitlink 的值。
      • 如果不使用bit.ly/###的值,就会出现You are currently forbidden to access this resource.这样的错误。请注意这一点。
    • 在 GET 方法中,'Content-Type': 'application/json' 不需要在请求头中使用。

    当这些点反映到你的脚本中时,它变成如下。

    修改脚本:

    function bitlyStats(bitlink) {
      var bitlink = 'bit.ly/###'; //  Please set your sample shortened URL here.
    
      Logger.log(bitlink)
      var accessToken = 'MYTOKEN';
      var fetchUrl = 'https://api-ssl.bitly.com/v4/bitlinks/' + bitlink + '/clicks/summary';
      Logger.log(fetchUrl)
      var headers = {
        'Authorization': 'Bearer '+ accessToken,
      };
      var params = {
        'method' : 'get',
        'headers' : headers,
        'muteHttpExceptions' : true
      };
      var response = UrlFetchApp.fetch(fetchUrl, params);
      Logger.log(response.getContentText());
      var clickCount = JSON.parse(response.getContentText()).total_clicks;
      return clickCount;
    }
    

    注意:

    • 在这个修改后的脚本中,它假设您的访问令牌是使用 API 的有效值。请注意这一点。

    参考资料:

    【讨论】:

    • 谢谢!这很棒。我现在开始工作了。对于我使用的位链接值 var bitlink_url_parts = bitlink_url.split('://'); var bitlink = bitlink_url_parts[1];
    • @racker 欢迎。谢谢你让我知道。在这种情况下,我认为bitlinkbit.ly/###,这样就可以使用该值。我很高兴你的问题得到了解决。如果您的问题已解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • @racker 感谢您的回复。
    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多