Использование API UrlShortener в пользовательской функции электронной таблицы

Я хотел бы использовать API (сокращение URL-адресов) с общедоступной надстройкой Google. На данный момент мой код возвращает:

Превышен дневной лимит для неавторизованного использования. Для дальнейшего использования требуется регистрация.

  • Это возможно?
  • If yes, Do I need an authentification Token?
    • If yes, what key type should I choose?
    • Как я могу реализовать авторизацию для такого использования?
    • Нужно ли мне за это платить?
  • Если нет, как другие надстройки могут использовать внешние API?

Большое спасибо за ваши ответы,


person JSmith    schedule 24.05.2015    source источник
comment
Знакомы ли вы с группой дополнений Google? Сообщество Google   -  person Alan Wells    schedule 25.05.2015
comment
Ну, мне сказали задавать вопросы о переполнении стека? Итак, что еще я могу сделать с этой группой?   -  person JSmith    schedule 25.05.2015
comment
Документация Google действительно направляет людей к stackoverflow, что создает у людей впечатление, что stackoverflow — это место для любого общего вопроса. А затем, когда люди задают общий вопрос, они получают отрицательные голоса. Ваш вопрос касается надстроек, и эта группа предназначена специально для надстроек.   -  person Alan Wells    schedule 25.05.2015
comment
Хорошо, спасибо, Сэнди. Я найду свой ответ в этой группе, но даже если это довольно общий вопрос, я чувствовал, что он может помочь людям понять основы реализации API на различных планах. Спасибо, в любом случае :)   -  person JSmith    schedule 25.05.2015
comment
Вы все еще можете получить ответ здесь. Есть официальный способ работы stackoverflow, а есть реальность.   -  person Alan Wells    schedule 25.05.2015
comment
Ежедневная бесплатная квота составляет 1 000 000 запросов. Как у вас устроено? Используете ли вы службу Url Shortener Advanced с включенным API в файле dev. консоль?   -  person Spencer Easton    schedule 25.05.2015


Ответы (1)


РЕДАКТИРОВАТЬ: ОП указал в комментариях, что это пользовательская функция. Пользовательская функция запускается с ограниченной авторизацией. Полный список доступных возможностей находится по адресу:
https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services

Ниже используется REST API для получения сокращенного URL-адреса. Это будет работать с пользовательскими функциями. Вам просто нужно включить API Shortener URL и сгенерировать ключ API сервера. Используйте IP-адреса по следующей ссылке для ключа API вашего сервера:
https://developers.google.com/apps-script/guides/jdbc#setup_for_google_cloud_sql

/**
 * Returns a shortened URL of the input.
 *
 * @param {string} longUrl The long URL to shorten.
 * @return The shortened url.
 * @customfunction
 */
function getShortUrl(longUrl) {

   var payLoad = {"longUrl": longUrl};
   var apiKey = PropertiesService.getScriptProperties().getProperty("ServerApiKey");
   var url  = "https://www.googleapis.com/urlshortener/v1/url?key="+ apiKey;
  var options = { method:"POST",
                 contentType:"application/json",
                 payload:JSON.stringify(payLoad),
                 muteHttpExceptions:true};

  var response = UrlFetchApp.fetch(url, options);
  if(response.getResponseCode() != 200){throw new Error("Unable to shorten url");}
  return JSON.parse(response).id;
}

Исходное сообщение


Вот краткое руководство по использованию расширенного сервиса UrlShortener. Вам нужно будет включить службу и активировать API-интерфейс Url Shortener в консоли разработчика. Это даст вам квоту в 1 000 000 запросов в день для вашего дополнения.

function myFunction() {
  var url = UrlShortener.newUrl();
  url.longUrl = "http://www.example.org";  
  var short = UrlShortener.Url.insert(url);
  Logger.log(short);

  //list all users shortened urls
  Logger.log(UrlShortener.Url.list());
}
person Spencer Easton    schedule 25.05.2015
comment
хорошо, все работает нормально, когда я использую его внутри IDE, но я не могу использовать его как пользовательскую функцию. Это связано с авторизацией моего приложения? Вот сообщение, которое я получаю при превышении дневного лимита для неаутентифицированного использования. Для дальнейшего использования требуется регистрация. заранее спасибо - person JSmith; 27.05.2015
comment
Пользовательские функции — это другой зверь. Я отредактирую ответ. - person Spencer Easton; 27.05.2015
comment
Спасибо, потому что я уже имел дело с проблемами триггеров, но до сих пор не совсем понимаю - person JSmith; 27.05.2015
comment
Хорошо, большое спасибо, теперь это работает. Но я так и не запустил его в эфир. - person JSmith; 28.05.2015