Bitly API V4 в скрипте Google Apps: получение ошибок при попытке вызвать сводку кликов

#javascript #api #google-apps-script #bitly

#javascript #API #google-apps-script #bitly

Вопрос:

Я довольно новичок в Apps Script, и это моя первая пользовательская функция, использующая API. Заранее спасибо за ваш совет.

Я следовал этому коду для интеграции Bitly в Google Sheets. https://gist.github.com/misterhay/38a500545ce7abc75b875f33f01c9f51

Код, который они предоставляют для сокращения, работает отлично, однако я не могу заставить функции расширения или статистики работать.

Ниже приведен мой код для 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;
}
 

Это сообщение об ошибке;

Ошибка синтаксиса: неожиданный токен в 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, 100.0, 10.0]

Ответ №1:

Точки модификации:

  • getContent() из класса HttpResponse возвращает массив байтов. Я думаю, что это причина вашей проблемы.
  • Если вы хотите получить текстовое значение, пожалуйста, используйте 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 . Я думаю, что причина вашей проблемы связана var bitlink = 'bitlink' с конечной точкой 'https://api-ssl.bitly.com/v4/bitlinks/' bitlink '/clicks/summary' .
    • В этом случае, в качестве тестового примера, пожалуйста, используйте ваш пример сокращенного 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. Пожалуйста, будьте осторожны с этим.

Ссылки:

Комментарии:

1. Спасибо! Это здорово. Теперь я заставил его работать. Для значения bitlink я использовал var bitlink_url_parts = bitlink_url.split(‘://’); var bitlink = bitlink_url_parts[1];

Ответ №2:

Это рабочий код для Bitly, использующий API v4 для сокращения длинного URL. Вы также можете создать копию этого листа и массово создавать битные ссылки, используя функцию bitlyShortenUrl в 3-м столбце — https://docs.google.com/spreadsheets/d/1TS-aQcDu3rRv-LexEoIqDiX0ydv69ijkXQP-nuQdBz4/edit#gid=0

 function bitlyShortenUrl(longLink, accessToken) {
  var form = { 
    "domain": "bit.ly",
    "long_url": longLink
  };
  var url = "https://api-ssl.bitly.com/v4/shorten";

  var options = {
      "headers": { Authorization: `Bearer ${accessToken}` },
      "method": "POST",
      "contentType" : "application/json",
      "payload": JSON.stringify(form)
  };
  var response = UrlFetchApp.fetch(url, options);
  var responseParsed = JSON.parse(response.getContentText());
  return(responseParsed["link"]);
}
 

PS: подробности о токене доступа к Bitly приведены здесь https://support.bitly.com/hc/en-us/articles/230647907-How-do-I-generate-an-OAuth-access-token-for-the-Bitly-API-