2017-01-19 5 views
1

Ich versuche mit der routexl API ein Skript zu erstellen, das die schnellste Route zum Übergeben mehrerer Standorte ausarbeitet. Alles, was ich versuche, scheint jedoch mit einem Fehler 409 Truncated Server Response zu kommen. Mein Code ist wie folgt.Google Script API routexl Fehler 409

function myFunctionpost() { 
     var url = "https://api.routexl.nl/distances"; 
     var places = [{"address":"1","lat":"52.05429","lng":"4.248618"},{"address":"2","lat":"52.076892","lng":"4.26975"},{"address":"3","lat":"51.669946","lng":"5.61852"}]; 
     var locations = JSON.stringify(places); 
     var headers = { 
      "Authorization":"Basic " + Utilities.base64Encode("Username:password"), 
      "Content-Type":"application/json" 
     }; 
     var options = { 
      'method' : 'post', 
      'headers' : headers, 
      'contentType': 'application/json', 
      'payload' : locations, 
      'muteHttpExceptions' : true 
     }; 
     var response = UrlFetchApp.fetch(url, options); 
     //var json = response.getContentText(); 
     //var data = JSON.parse(json); 
     Logger.log(response); 
    } 
+0

hinzufügen 'muteHttpExceptions: true', um Ihre Optionen. A 409 könnte bedeuten, dass der Dienst Ihre Nutzlast nicht mag. Wenn muteHttpExceptions aktiviert ist, können weitere Daten in der Antwort vorhanden sein. –

+0

Danke @SpencerEaston Ich habe das hinzugefügt, wie Sie vorgeschlagen haben, was mir eine weitere Ausgabe von 'Syntax Error, Unexpected Token: N' in der Zeile 'var data = JSON.parse (json);' gab um die Antwort zu protokollieren. Die neue Information, die wir in den Logs erhalten haben, lautet 'No input found'. – codeacker

Antwort

0

Der Fehler 409 gibt an, dass no input gefunden wurde. Ich bin kein Google Apps-Experte, aber die RouteXL-API erwartet "Standorte" als Eingabeparameter. In Ihrem Beispiel wird der Standort JSON ohne den Standortschlüssel gebucht.

Update: Nach einigen Tests mit Google Apps Script habe ich festgestellt, dass ContentType angepasst werden muss.

Hier ist ein Beispiel, das für mich gearbeitet:

function myFunctionpost() { 
     var url = "https://api.routexl.nl/distances"; 
     var places = [{"address":"1","lat":"52.05429","lng":"4.248618"},{"address":"2","lat":"52.076892","lng":"4.26975"},{"address":"3","lat":"51.669946","lng":"5.61852"}]; 
     var locations = JSON.stringify(places); 
     var headers = { 
      "Authorization":"Basic " + Utilities.base64Encode("username:password") 
     }; 
     var options = { 
      'method' : 'post', 
      'headers' : headers, 
      'contentType': 'application/x-www-form-urlencoded', 
      'payload' : {'locations': locations}, 
      'muteHttpExceptions' : true 
     }; 
     var response = UrlFetchApp.fetch(url, options); 
     //var json = response.getContentText(); 
     //var data = JSON.parse(json); 
     Logger.log(response); 
    } 
+0

Ich brauche nur JSON.String den Nutzwert und das sollte es tun. –

+0

@SpencerEaston War es nicht schon? var locations = JSON.stringify (Orte); – RouteXL

+0

Ich habe mich angemeldet, um das zu testen. Ich habe jede Kombination aus dem Posten der Daten versucht, und ich kann es nicht arbeiten lassen. Ich verwende sogar die Beispieldaten aus den API-Dokumenten ... Ich kann die Statusseite aufrufen, nur der Entfernungsendpunkt akzeptiert die Postdaten in keiner Form. –