Google Sheets Advanced Google Services URL Shortener 403 Error: Forbidden

Google Sheets Advanced Google Services URL Shortener 403 Error: Forbidden

我正在尝试在 Google 表格中创建一个小应用程序来整理我个人 google 帐户中的 URL。我正在使用我在此处找到的以下代码:Google Sheets Function to get a shortened URL (from Bit.ly or goo.gl etc.)

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("Shorten")
    .addItem("Go !!","rangeShort")
    .addToUi()  
}

function rangeShort() {
  var range = SpreadsheetApp.getActiveRange(), data = range.getValues();
  var output = [];
  for(var i = 0, iLen = data.length; i < iLen; i++) {
    //var url = UrlShortener.Url.insert({longUrl: data[i][0]});
    var url = UrlShortener.Url.insert({longUrl: 'www.google.com'});
    output.push([url.id]);
  }
  range.offset(0,1).setValues(output);
}

我创建了一个新的 Google 云项目,并在项目和 Google sheet 上启用了 URL 缩短器 API。问题是,当我尝试 运行 代码时,我在该行出现错误:var url = UrlShortener.Url.insert({longUrl: 'www.google.com'});

error 403, message:forbidden

当我尝试执行 rangeShort() 函数时。我不知道如何解决这个问题。任何想法将不胜感激!谢谢!

如果您的项目在 2018 年 3 月 30 日之前使用了 url 缩短服务

而不是

www.google.com

使用

https://www.google.com

参考:https://developers.google.com/url-shortener/v1/url/insert

但如果您的项目是在 2018 年 3 月 30 日或之后创建的

来自https://developers.google.com/url-shortener/v1/

Starting March 30, 2018, we will be turning down support for goo.gl URL shortener. Please see this blog post for detailed timelines and alternatives.

为了清楚起见,请注意,来自链接的博客 post:

For developers

Starting May 30, 2018, only projects that have accessed URL Shortener APIs before today can create short links.

事实证明,就像 Ruben 提到的那样,Google has moved away from their URL shortener。所以经过大量研究和测试,这里是解决方案:

第 1 步

将 Google Cloud Project 迁移到 Firebase 或创建一个新的 Firebase 项目。请参阅步骤 here

第 2 步

创建一个虚拟项目以便为起酥油创建基础 URL。参见 this youtube video

第 3 步

获取 Web API Key from your new Firebase Project(不是您刚创建的应用)

第 4 步

检查屏幕左侧菜单并导航至“增长”->“动态链接”。您应该会看到您创建的新应用程序和应用程序顶部的 URL。这将成为新缩短的 URLs.

的基础

第 5 步

在 Google 表格中的代码生成器内的 Google Apps 脚本中创建代码。这是对我有用的代码(我将 url 传递给此函数)(此代码基于找到的答案 here):

function api_call(url){
  var req='https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=[YOUR PROJECT WEB API KEY FROM STEP 3]';
  var formData = {
    "longDynamicLink": "[YOUR APPLICATION URL BASE FROM STEP 4]?link=" + url,
    "suffix" : {
      "option" : "UNGUESSABLE" 
    }
  };
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(formData)

  };

  var response = UrlFetchApp.fetch(req, options);
  var res=JSON.parse(response);

  return res.shortLink;
}

附加信息

  1. Documentation on Creating Dynamic Links in Firebase
  2. Documentation on using UrlFetchApp() in Google Apps Script

我可以证明@alutz 在这里的回答是他们的代码addition/correction。

将 encodeURIcomponent() 用于输入 url,同时将其分配给 Long Dynamic Link,以防您有多个自定义参数。

"longDynamicLink": "[YOUR APPLICATION URL BASE FROM STEP 4]?link=" + encodeURIcomponent(url),

这让我可以为我的电报机器人传递多个参数,例如 chat_id、文本和 parse_mode。