2013-03-19 9 views
1

J'ai essayé toutes les combinaisons possibles pour que cela fonctionne. Que dois-je envoyer à l'API New Basecamp en tant que champ POST pour qu'il accepte mes données POST?Google Apps Script Basecamp POST

Mon code est:

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

Mon erreur est:

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

J'ai essayé de Utilities.jsonStringify, mais pas de chance. Je sais que c'est une erreur noob, mais je ne peux tout simplement pas comprendre. S'il y a un endroit où vous savez où je peux obtenir cette information, ce serait phénoménal.

Merci!

MISE À JOUR 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); 
     } 

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

Répondre

1

Etes-vous sûr que vous avez essayé avec JSON.stringify correctement? Cet exemple crée correctement un projet pour moi dans Basecamp avec le nom/la description de projet spécifié dans la charge utile POST.

Note, je l'ai écrit cela rapidement pour ne pas inclure le UserAgent -. Vous aurez envie de remettre tout ça dans

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

Afin de mettre à jour un projet, vous devez utiliser le verbe put au lieu de post comme documented ici

Voici un échantillon de travail -

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

qui fonctionne pour créer un nouveau projet, mais pas modifier un projet existant pour certains re un fils. –

+0

Vous ne devriez pas obtenir l'erreur que vous avez spécifiée si c'est le cas. Avez-vous une erreur différente - il ne devrait pas s'agir de "char invalide dans le texte json". –

+0

Mes excuses, j'ai ajouté une mise à jour. Je vous remercie. –