Проблемы с использованием API goo.gl из скрипта Google Apps - PullRequest
3 голосов
/ 04 июля 2011

Я пытаюсь запросить API goo.gl из скрипта Google Apps. Проблема, которую я вижу, заключается в следующем сообщении об ошибке:

Request failed for https://www.googleapis.com/urlshortener/v1/url?key=AIXXXXXXXXXXXXXXXXXXXXXLmGJQw returned code 400. Server response: { "error": { "errors": [ { "domain": "global", "reason": "parseError", "message": "This API does not support parsing form-encoded input." } ], "code": 400, "message": "This API does not support parsing form-encoded input." } } (line 28)

появляется сообщение, когда я пытаюсь выполнить фактический запрос на UrlFetchApp.fetch(post_url, options);.

Вот фактическое кодирование, которое я использую в скрипте Google Apps.

function minifyGoogl(longUrl) {
  var post_url = 'https://www.googleapis.com/urlshortener/v1/url';

  var apiKey = UserProperties.getProperty('googl_api_key');

  if(!apiKey){
    var apiKey = ScriptProperties.getProperty('googl_api_key');
  }

  if(apiKey){
    post_url += '?key=' + apiKey;
  }

  var payload = Utilities.jsonStringify({'longUrl': longUrl });

  var options = {
    'method' : 'post',
    'headers' : {
      'Content-Type' : 'application/json'
    },
    'payload' : payload
  };

  try{
    var response = UrlFetchApp.fetch(post_url, options);
  }catch(e){
    if(e.message){
      throw e.message;
    }
  }

  var responseJson = response.getAs('json');
}
function testMinifyGoogl(){
  minifyGoogl('http://eduardo.cereto.net');
}

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

В документации указано, что contentType по умолчанию установлено в 'application / x-www-form-urlencoded' .

Возможно, попробуйте установить Content-Type с аргументом contentType, а не вставлять заголовок Content-Type вручную?

0 голосов
/ 24 апреля 2015

Следующий код работает отлично.

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);
}
...