403 ответа на вызов API из GoogleScript

#api #google-apps-script

#API #google-apps-script

Вопрос:

Я использовал этот фрагмент кода из https://developers.rebrandly.com/docs/api-custom-url-shortener . Я заполнил свой ключ. Также набрал рабочее пространство «Main Workspace» (не уверен, правильно ли это [или требуется]. на самом деле не похоже на идентификатор, но ничего другого найти не удалось).

(Я протестировал настройку своего домена с помощью интерфейса сокращения на Rebrandly.com сайт сам по себе. это работает. так что настройка должна быть в порядке).

 function Rebrandly(){
  var payload = {
    destination: "https://www.youtube.com/channel/UCHK4HD0ltu1-I212icLPt3g",
    domain: { fullName: "rebrand.ly" }
    //, slashtag: "A_NEW_SLASHTAG"
    //, title: "Rebrandly YouTube channel"
  }

  var headers = {
    apikey: "YOUR_API_KEY",
    workspace: "YOUR_WORKSPACE_ID"
  }

  var params = {
    headers: headers,
    contentType: "application/json",
    method: 'post',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  }
 var response = UrlFetchApp.fetch("https://api.rebrandly.com/v1/links", params);

  Logger.log(response.getResponseCode());

  if (response.getResponseCode() == 200){
    var link = JSON.parse(response.getContentText())
    Console.log(`Long URL was ${payload.destination}, short URL is ${link.shortUrl}`);
  }
} 
 

(Извините, возможно, вопрос выглядит глупо, но я просто программист-любитель)

Ответ №1:

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

  • Из I used this piece of code from https://developers.rebrandly.com/docs/api-custom-url-shortener. I filled my key. Also typed work space "Main Workspace" (not sure if that is correct [or required]. doesn't really look like an ID, but could not find anything else). , я думал , что вы используете свой ключ API для apikey: "YOUR_API_KEY" . И вы используете свой идентификатор рабочей области в workspace: "YOUR_WORKSPACE_ID" качестве «Основного рабочего пространства».
    • Если я правильно понимаю, в данном случае я думаю, что «Основное рабочее пространство» — это имя рабочего пространства. Это не идентификатор рабочей области. Когда «Основное рабочее пространство» является идентификатором рабочего пространства, возникает такая ошибка. Я думаю, что это причина вашей проблемы. Чтобы получить свой идентификатор рабочей области, вы можете получить его с помощью следующего скрипта.
         function getWorkSpaceId() {
          const apikey = "###";  // Please set your api key.
          const url = "https://api.rebrandly.com/v1/account/workspaces?orderBy=createdAtamp;orderDir=descamp;limit=25";
          const res = UrlFetchApp.fetch(url, {headers: {apikey: apikey}});
          const obj = JSON.parse(res.getContentText())
          const workspaceIds = obj.map(({id}) => id);
          console.log(workspaceIds)
        }
       
  • В вашем скрипте Console.log( длинный URL-адрес был $ {payload.destination}, короткий URL-адрес $ {link.shortUrl} ); требуется изменить. В этом случае, пожалуйста, используйте console.log .

Модифицированный скрипт:

Когда getWorkSpaceId() он включен в ваш скрипт, он становится следующим. Перед использованием этого скрипта, пожалуйста, установите для вашего ключа API apikey значение .

 function getWorkSpaceId(apikey) {
  const url = "https://api.rebrandly.com/v1/account/workspaces?orderBy=createdAtamp;orderDir=descamp;limit=25";
  const res = UrlFetchApp.fetch(url, {headers: {apikey: apikey}});
  const obj = JSON.parse(res.getContentText())
  const workspaceIds = obj.map(({id}) => id);
  return workspaceIds;
}

function Rebrandly(){

  var apikey = "YOUR_API_KEY"; // <--- Please set your api key.

  var workspaceIds = getWorkSpaceId(apikey);
  var workspaceId = "";
  if (workspaceIds.length > 0) {
    workspaceId = workspaceIds[0];
  } else {
    throw new Error("No workspace ID.");
  }

  var payload = {
    destination: "https://www.youtube.com/channel/UCHK4HD0ltu1-I212icLPt3g",
    domain: { fullName: "rebrand.ly" }
    //, slashtag: "A_NEW_SLASHTAG"
    //, title: "Rebrandly YouTube channel"
  }

  var headers = {
    apikey: apikey,
    workspace: workspaceId
  }

  var params = {
    headers: headers,
    contentType: "application/json",
    method: 'post',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  }
 var response = UrlFetchApp.fetch("https://api.rebrandly.com/v1/links", params);

  Logger.log(response.getResponseCode());

  if (response.getResponseCode() == 200){
    var link = JSON.parse(response.getContentText())
    console.log(`Long URL was ${payload.destination}, short URL is ${link.shortUrl}`);
  }
}
 

Примечание:

  • В этом модифицированном скрипте идентификатор 1-го рабочего пространства используется путем указания ключа api. Итак, это используется для тестирования скрипта. Но, если вы хотите использовать конкретный идентификатор рабочей области, пожалуйста, измените приведенный выше сценарий.
  • Приведенный выше сценарий предполагает, что ваш ключ API действителен. Пожалуйста, будьте осторожны с этим.

Ссылки:

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

1. Я просмотрел ссылки, которые вы добавили. Я понимаю, что я мог бы найти URL-адрес для идентификатора рабочего пространства. Но я не могу найти часть «{headers: {apikey: apikey}}», которую вы используете в выборке URL. Как вы это нашли? (Я вижу «apikey» для заголовка при использовании кнопки «попробовать». Это откуда он берется?)

2. @Zjost Спасибо за ответ. Я рад, что ваша проблема была решена. Что касается вашего нового вопроса о I can't find the "{headers: {apikey: apikey}}" part that you use in the URLfetch. How did you find that? том, когда я пытаюсь ввести примерное значение ключа api, чтобы «Попробовать» «/ v1 / account / workspaces» на Javascript, я подтвердил headers: {apikey: '###'} . Ссылка Если это не тот результат, который вы ожидаете, я приношу свои извинения.