2017-01-19 9 views
1

私は、複数の場所を渡す最速のルートを実行するスクリプトを、routexl APIの助けを借りて作成しようとしています。しかし、私が試したすべては、エラー409切り詰められたサーバーの応答を思い付くようです。私のコードは以下の通りです。Google Script APIのroutexlエラー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

は 'muteHttpExceptionsを追加します。 409はサービスがあなたのペイロードを好まないことを意味する可能性があります。 muteHttpExceptionsをオンにすると、レスポンスにさらに多くのデータが存在する可能性があります。 –

+0

ありがとうございます@SpencerEaston私はこれを追加しました。これは、 'var data = JSON.parse(json);'行に 'Syntax Error、Unexpected token:N'という別の問題を付けました。応答を記録する。これがログに記録された新しい情報は「入力が見つかりません」です。 – codeacker

答えて

0

エラー409は、no inputが見つかりました。私はGoogle Appsの専門家ではありませんが、RouteXL APIでは入力パラメータとして「場所」が必要です。あなたの例では、ロケーションキーなしでロケーションJSONがポストされています。

更新:Google Apps Scriptでいくつかのテストを行った結果、ContentTypeを調整する必要があることもわかりました。ここで

は私のために働いた例である:あなたのオプションにtrue`を:

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

ペイロード値をJSON.stringifyするだけで済みます。 –

+0

@SpencerEastonそれはまだですか? var locations = JSON.stringify(場所); – RouteXL

+0

私はこれをテストするためにサインアップしました。私はデータを投稿するすべての組み合わせを試して、私はそれを動作させることはできません。私はAPIドキュメントのサンプルデータを使用しています...私はステータスページを押すだけで、距離のエンドポイントはどの形式でも投稿データを受け付けません。 –