2013-03-19 3 views
1

Я пробовал все комбинации, о которых я могу думать, чтобы сделать эту работу. Что мне нужно, чтобы отправить в New 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, но я просто не могу понять это. Если есть место, где вы знаете, где я могу получить эту информацию, это было бы феноменально.

Спасибо!

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

Урожайность Err:

<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.

Заметьте, я написал это быстро, чтобы не включать UserAgent. - Вы хотите, чтобы положить его обратно в

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 глагол вместо post а documented здесь

Вот рабочий пример -

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

это делает работу, чтобы создать новый проект, но не редактировать существующий проект в течение некоторого ре сын. –

+0

Вы не должны получать указанную вами ошибку, если это так. Вы получаете другую ошибку - это не должно касаться «недопустимого символа в json-тексте». –

+0

Приносим извинения, я добавил обновление. Спасибо. –

Смежные вопросы