又来了!
我创建了一个使用UrlShortener.Url.insert功能的嵌入式电子表格脚本。我的客户希望能够创建此电子表格的新实例以与同事共享。我已经实现了此功能,但当我开始测试新实例时,我发现我必须在Google Developers Console中启用URL Shortener API。
我想知道我是否可以使用我的脚本绕过这个手动工作,或者我只能为客户提供如何操作的说明?
更新: Sandy Good建议使用UrlFetch.fetch()来获取短链接,但是这段代码:
function test_short_link() {
var options =
{
'longUrl': 'http://www.google.com/',
'muteHttpExceptions': true
};
var result = UrlFetchApp.fetch("https://www.googleapis.com/urlshortener/v1/url",
options);
Logger.log(result);
}
返回:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Required parameter: shortUrl",
"locationType": "parameter",
"location": "shortUrl"
}
],
"code": 400,
"message": "Required parameter: shortUrl"
}
}
看起来像topic
这段代码
function test_short_link() {
var options =
{
'longUrl': 'http://www.google.com/',
'muteHttpExceptions': true,
'method':'post'
};
var result = UrlFetchApp.fetch("https://www.googleapis.com/urlshortener/v1/url",
options);
Logger.log(result);
}
带我们:
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "userRateLimitExceededUnreg",
"message": "User Rate Limit Exceeded. Please sign up",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "User Rate Limit Exceeded. Please sign up"
}
}
答案 0 :(得分:4)
编辑:没有办法通过网站旁边的任何方法访问Google Dev控制台。
以下是UrlFetchApp执行此操作的方法。您需要传递payload参数中的选项,而不是UrlFetchApp选项对象中的选项。您还需要在标头中传递当前用户OAuth令牌。当然,您需要修改此代码,因为它对longUrl进行硬编码并且不进行错误检查。
function ShortenUrl(){
var url = "https://www.googleapis.com/urlshortener/v1/url"
var payload = {"longUrl":"www.google.com"};
var parameters = { method : 'post',
headers : {'Authorization': 'Bearer '+ScriptApp.getOAuthToken()},
payload:JSON.stringify(payload),
contentType:'application/json',
muteHttpExceptions:true};
var response = UrlFetchApp.fetch(url, parameters);
Logger.log(response);
}
答案 1 :(得分:0)
这可以完美地完成。试试这段代码:
function ShortenUrl(){
var url = 'https://www.googleapis.com/urlshortener/v1/url';
var apiKey = 'AIzBlNS-3HZdxKgwj-x30';
url += '?key=' + apiKey;
var payload = {"longUrl":"www.google.com"};
var parameters = { method : 'post',
payload:JSON.stringify(payload),
contentType:'application/json',
muteHttpExceptions:true};
var response = UrlFetchApp.fetch(url, parameters);
Logger.log(response);
}