라이브러리 : 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF 로 추가(OAuth2)
고급 구글 서비스 : Drive API
행아웃 채트 API 활성화
CLOUD VISION API 는 이미지를 식별해 주는데, 구글 드라이브에 업로드 된 파일은 경로 참조로 가져오기가 되지 않는다.
base64로 변환 후 사용 가능하다.
function test(){//vision api 테스트
var fileurl="구글 드라이브 이미지 파일 경로";
var data1 = JSON.parse(makeRequest(fileurl));
//data.responses[0].webDetection.bestGuessLabels[0].label, data.responses[0].webDetection.webEntities[0].description 을 추출하여 사용
Logger.log(data1.responses[0].webDetection);
}
function buildJSONRequestImgBase64(val) {//base64 인코딩 및 json 메시지 생성
var file = DriveApp.getFileById(val);
var data1 = Utilities.base64Encode(file.getBlob().getBytes());
return JSON.stringify({
requests: [{
image: {
content:data1
},
features: [{
type: "WEB_DETECTION",
maxResults: 1
}]
}]
});
}
var APIKey = 'Your key';
function makeRequest(b64) {// Make a POST request to Vision API with a JSON payload.
var visionApiUrl = 'https://vision.googleapis.com/v1/images:annotate?key=' + APIKey;
var JSON_REQ = buildJSONRequestImgBase64(b64);
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON_REQ
};
var response = UrlFetchApp.fetch(visionApiUrl, options);
return response.getContentText();
}
//행아웃 채팅으로 봇이 받은 이미지를 리사이징하여 저장한다.
function uploadAttachmentToDrive(attachment, folderId, fileName){//행아웃 채팅으로 받은 이미지 파일 처리 구글 드라이브로 업로드 및 썸네일 생성
var resourceName = attachment[0].attachmentDataRef.resourceName;
var blob = "";
var url = "https://chat.googleapis.com/v1/media/" + resourceName + "?alt=media"
var service = getOAuth2Service();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + service.getAccessToken(),
},
'muteHttpExceptions': true,
});
if (response.getResponseCode() != 200) {
return url;
}
blob = response.getBlob();
var folder = DriveApp.getFolderById(folderId);
var uploadFile = folder.createFile(blob);
uploadFile.setName(fileName);
var width = 800;
var link = Drive.Files.get(uploadFile.getId()).thumbnailLink.replace(/\=s.+/, "=s" + width);
var blob2 = UrlFetchApp.fetch(link).getBlob().setName(fileName+"_t");
var file = folder.createFile(blob2);
return file.getId();
}
function onMessage(event) {
if(event.message.attachment != null){
var fileurl = uploadAttachmentToDrive(event.message.attachment,"폴더명",Utilities.formatDate(dt, "GMT+9", "YYYY.MM.dd HH:mm:ss"));
}
function getOAuth2Service() {
var serviceAccountPriveKey = '-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----\n';
var serviceAccountClientEmail = '~gserviceaccount.com';
var scope = 'https://www.googleapis.com/auth/chat.bot';
var service = OAuth2.createService('Vote bot')
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
.setPrivateKey(serviceAccountPriveKey)
.setClientId(serviceAccountClientEmail)
.setScope(scope);
if (!service.hasAccess()) {
console.log('Authentication error: %s', service.getLastError());
return;
}
return service;
}
댓글 달기