2017-10-13 15 views
0

Google 캘린더를 사용하여 Google 스크립트를 통해 왓슨 검색에 문서로 매일 게시하려고합니다. 내 코드는 다음과 같습니다.JSON 객체를 Google App 스크립트에서 Watson Discovery에 게시

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을 설정했습니다. 어떤 제안? UrlFetchApp.Fetch가 실행될 때

PARMS 변수는 다음과 같습니다

{"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에 저장)를 검색 문서로 씁니다. 'newurl'에 api 엔드 포인트를두고 'authdata'(json 객체)에 사용자 이름과 비밀번호를 저장하고 발견 문서의 파일 이름을 'filename'에 지정합니다.

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