2013-03-19 4 views
1

나는이 작업을 수행하기 위해 내가 생각할 수있는 모든 조합을 시도했습니다. POST 데이터를 받아들이려면 POST 필드로 New Basecamp API에 무엇을 보내야합니까?Google Apps 스크립트 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에 시도,하지만 운이있다. 나는 그것의 멍청한 실수를 알고 있지만, 나는 그것을 알아 내지 못합니다. 내가이 정보를 얻을 수있는 곳을 알고있는 곳이 있다면 그것은 경이적 일 것입니다.

감사합니다.

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

는 잘못을 나타냅니다 : 당신은 당신이 제대로 JSON.stringify으로 시도해야합니다

<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

있습니까? 여기에있는 예제는 나에게 맞는 Basecamp 프로젝트를 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); 
} 

위해 프로젝트를 업데이트하려면 post 대신 put 동사를 사용해야합니다

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

일부 재에 대한 기존 프로젝트를 편집 할 수없는 일이 새 프로젝트를 만들 않지만 - 여기 documented로 여기

는 작업 예제입니다 아들. –

+0

그런 경우 지정된 오류가 발생하지 않아야합니다. 다른 오류가 발생합니까? "json 텍스트의 잘못된 문자"와 관련해서는 안됩니다. –

+0

사과, 업데이트를 추가했습니다. 고맙습니다. –

관련 문제