2011-07-04 16 views
3

我試圖從Google Apps腳本中查詢goo.gl API。我看到的問題是以下錯誤消息:從谷歌應用程序腳本中使用goo.gl API的問題

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

回答

3

The documentationcontentType默認爲 '應用程序/ x WWW的形式進行了urlencoded'

也許嘗試設置Content-TypecontentType參數,而不是手動插入Content-Type標頭?

+0

謝謝,這正是我所需要的。我沒有看到'contentType'參數。並嘗試使用HTTP頭參數自己設置它。 – Eduardo

+0

爲我修好了。我使用的庫要求我手動JSON.stringify我的請求正文。這使我指出了正確的方向。謝謝! – frosty

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); 
} 
相關問題