2017-10-13 78 views
0

我正在嘗試將我的Google日曆和發佈日曆作爲文檔發送到通過谷歌腳本進行的watson發現。我的代碼看起來像這樣。從Google App腳本發佈JSON對象到Watson發現

var headers={ 
      "User-Agent": "CreateCalendarListJson", 
      "Authorization": "Basic " + Utilities.base64Encode(authdata.username+":"+authdata.password) 
     }; 
     //headers.contentType="application/json"; 
     var parms={"headers":headers}; 
     url=newurl+"/v1/environments/"+discoveryData.environmentID+ 
      "/collections/"+discoveryData.collection_ID+"/documents/?version=2017-09-01"; 
     parms.method="POST"; 
     parms.file={ 
      'value':JSON.stringify(jsonEvent), 
      'options':{ 
      'filename':jsonEvent.filename, 
      'contentType':"application/json" 
      } 
     } 
     console.info('discovery add document %s',JSON.stringify(parms)); 
     response=UrlFetchApp.fetch(url,parms); 

但是,這會得到一個錯誤415不支持的媒體類型。儘管application/json是一種支持的類型,我已經相應地設置了contentType。有什麼建議麼?

的PARMS變量看起來像這樣運行UrlFetchApp.Fetch時:

{"headers": 
    {"User-Agent":"CreateCalendarListJson", 
     "Authorization":"Basic ZTIyNTEwM............................tHcg=="}, 
     "method":"POST", 
     "file":{"value":"{\"title\":\"Events 10/13/2017\",\"filename\":\"Events_10_13_2017\",\"text\":[{\"date\":\"10/13/2017\",\"summary\":\"assignment 1\"}]}", 
     "options":{"filename":"Events_10_13_2017", 
     "contentType":"application/json"}}}" 

回答

0

的問題是,文件沃森發現必須作爲一個多部分/格式的數據類型進行傳遞。以下函數將寫入一個json文本(存儲在jsonEvent.text中)作爲發現文檔。將api端點放在'newurl'中,並在'authdata'(json對象)中存儲發現用戶名和密碼,並在'文件名'中爲發現文檔指定文件名。

function sendtodiscovery(url, jsonEvent, filename,authdata){ 
    var headers={ 
     "User-Agent": "CreateCalendarListJson", 
     "Authorization": "Basic " + Utilities.base64Encode(authdata.username+":"+authdata.password) 
    }; 
    var parms={"headers":headers}; 
    var boundary="xxxxxxxx"; 
    parms.method="POST"; 
    var data="--"+boundary+"\r\n" 
    data += "Content-Disposition: form-data; name=\"file\"; filename=\""+filename+"\"\r\n"; 
    data += "Content-Type: application/json\r\n\r\n"; 
    console.info("data=%s",data); 
    console.info("event=%s",JSON.stringify(jsonEvent)); 
    var payload=Utilities.newBlob(data).getBytes() 
    .concat(Utilities.newBlob(JSON.stringify(jsonEvent)).getBytes()) 
    .concat(Utilities.newBlob("\r\n--"+boundary+"--\r\n\r\n").getBytes()); 

    parms.contentType="multipart/form-data; boundary="+boundary; 
    parms.payload=payload; 
    //parms.muteHttpExceptions=true; 
    console.info('discovery add document %s',JSON.stringify(parms)); 
    return UrlFetchApp.fetch(url,parms); 
}