Google Apps 脚本中的 Bitly API V4:尝试调用点击摘要时出现错误
Bitly API V4 in Google Apps Script: getting errors when trying to call clicks summary
我是 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: 意外的标记,在 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、110.0]
修改点:
getContent()
of Class HTTPResponse returns 字节数组。我认为这就是您遇到问题的原因。
- 当您要检索文本值时,请使用
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 的有效值。请注意这一点。
参考文献:
这是 Bitly 使用 v4 API 缩短长 URL 的工作代码。您还可以创建此 sheet 的副本,并使用第 3 列中的函数 bitlyShortenUrl
批量创建位链接 - 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-
我是 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: 意外的标记,在 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、110.0]
修改点:
getContent()
of Class HTTPResponse returns 字节数组。我认为这就是您遇到问题的原因。- 当您要检索文本值时,请使用
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.
这样的错误。请注意这一点。
- 在这种情况下,作为测试用例,请使用您缩短的样本 URL 如
- 在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 的有效值。请注意这一点。
参考文献:
这是 Bitly 使用 v4 API 缩短长 URL 的工作代码。您还可以创建此 sheet 的副本,并使用第 3 列中的函数 bitlyShortenUrl
批量创建位链接 - 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-