2013-03-19 126 views
1

我嘗試了所有可以考慮的組合來完成此項工作。我需要發送到新Basecamp API作爲POST字段才能讓它接受我的POST數據?Google Apps Script Basecamp POST

我的代碼是:

function getFilterBy() { 
    var url = "https://basecamp.com/****/api/v1/projects/*****.json"; 
    var payload = {"name" : "myapp", "description" : "no desc mls"}; 
    var opt = { 
       "contentType" : "application/json", 
       "method" : "POST", 
       "headers":{ "User-Agent": "myapp ([email protected])", 
          "Authorization" :"Basic " + Utilities.base64Encode("user" + ":" + "pass")}, 
       "validateHttpsCertificates" :false, 
       "muteHttpExceptions" : true, 
       "payload" : payload 
       }; 
    var response = UrlFetchApp.fetch(url, opt); 
    var text = response.getContentText(); 
    Logger.log(text); 
    } 

我的錯誤是:

lexical error: invalid char in json text. 
            description=no+desc+mls&name=Ho 
       (right here) ------^ 

我試圖Utilities.jsonStringify,但沒有運氣。我知道它是一個noob錯誤,但我無法弄清楚。如果有一個地方你知道我在哪裏可以得到這個信息,那將是驚人的。

謝謝!

更新1

function getFilterBy() { 
     var url = "https://basecamp.com/****/api/v1/projects/****.json"; 
     var payload = {name : 'myApp Change'}; 
     var opt = { 
        "contentType" : "application/json", 
        "method" : "POST", 
        "headers":{ "User-Agent": "myApp ([email protected])", 
        "Authorization" :"Basic " + Utilities.base64Encode("user" + ":" + "pass")}, 
        "validateHttpsCertificates" :false, 
        "muteHttpExceptions" : true, 
        "payload" : Utilities.jsonStringify(payload) 
        }; 
     var response = UrlFetchApp.fetch(url, opt); 
     var text = response.getContentText(); 
     Logger.log(text); 
     } 

息率錯誤:

<body> 
    <div class="dialog"> 
    <div class="innercol"> 
     <h1>Hmm, that isn&rsquo;t right</h1> 
     <h2>You may have typed the URL incorrectly.</h2> 
     <p>Check to make sure you&rsquo;ve got the spelling, capitalization, etc. exactly right.</p> 
    </div> 
    </div> 
    <p id="back" class="back"> 
     <a href="javascript:window.history.back();">&larr; Back to previous page</a> 
    </p> 
    <script type="text/javascript"> 
     if (window.history.length <= 1) document.getElementById("back").style.display = "none"; 
    </script> 
    </body> 

回答

1

你確定你JSON.stringify嘗試是否正確?這裏的示例正確地爲我在Basecamp中爲POST創建一個項目,並在POST有效負載中指定項目名稱/描述。

注意,我很快就寫了這不包括用戶代理 - 你要擺在那後面

function createProject() { 
    var user = 'USERNAME'; 
    var password = 'PASSWORD' 
    var accoundId = 'ACCOUNTID#'; 

    var url = 'https://basecamp.com/'+accoundId+'/api/v1/projects.json'; 
    var payload = {name : 'new project', description : 'my project description'}; 
    var opt = { 
    contentType : 'application/json', 
    method : 'post', 
    headers:{Authorization :"Basic " + Utilities.base64Encode(user + ':' + password)}, 
    validateHttpsCertificates :false, 
    muteHttpExceptions : true, 
    payload : JSON.stringify(payload) 
    }; 

    var response = UrlFetchApp.fetch(url, opt); 
    var text = response.getContentText(); 
    Logger.log(text); 
} 

爲了更新項目,你必須使用put動詞,而不是postdocumented這裏

這裏是工作示例 -

function updateProject() { 
    var projectId = '2413370'; 
    var url = 'https://basecamp.com/'+accoundId+'/api/v1/projects/'+projectId+'.json'; 
    var payload = {name : 'new project', description : 'my new new project description'}; 
    var opt = { 
    contentType : 'application/json', 
    method : 'put', 
    headers:{Authorization :"Basic " + Utilities.base64Encode(user + ':' + password)}, 
    validateHttpsCertificates :false, 
    muteHttpExceptions : true, 
    payload : JSON.stringify(payload) 
    }; 

    var response = UrlFetchApp.fetch(url, opt); 
    var text = response.getContentText(); 
    Logger.log(text); 
} 
+0

這確實工作,創建一個新的項目,但不能編輯現有項目的一些重新一個兒子。 – 2013-03-19 16:51:31

+0

如果出現這種情況,您不應該得到您指定的錯誤。你會得到一個不同的錯誤 - 它不應該是關於「JSON文本中的無效字符」。 – 2013-03-19 17:16:10

+0

我的歉意,我添加了一個更新。謝謝。 – 2013-03-19 17:38:35

相關問題