【Wakatime으로부터 주일로 도착하는 메일을 GAS로 SpreadSheet에 자동 전기한다】
14664 단어 자동화GoogleSpreadSheetwakatimegas
wakatime을 사용하고 있고, 언어 별 사용 빈도등 기록해 두고 싶은 사람은 copipe하면 아마 갈 수 있다
다음
setTrigger()
를 한 번 실행하면 7일마다 getWakaFunc()가 실행된다.//定期実行関数
function setTrigger() {
ScriptApp.newTrigger('getWakaFunc').timeBased().everyDays(7).create();
}
다음 함수를 실행하면 언어별 사용 시간만 추출할 수 있습니다.
→ 거친 흐름
・ 굉장히 rt @ Wakachime. 이 m 에 일치하는 메일의 내용을 취득
・언어별 사용시간이 기재되어 있는 곳만 추출
· spreadSheet의 마지막 행에 쓰기
· 처리 된 라벨을 붙여 두 번로드되지 않도록합니다.
추가 ...... 2021/5/6
wakatime에서 보낸 주소가 변경되었습니다.
굉장히 rt @ Wakachime. 이 m -> Nore ply @ Wakachime. 이 m
//wakatimeから受け取ったメールを古い順に並べる関数
function getWakamail(){
let WakaAddress = '[email protected]';
var threads = GmailApp.search(`from:${WakaAddress} has:nouserlabels`);
var reversedThreads = threads.reverse();
return reversedThreads;
}
// wakatimeから受け取ったメールを転記する関数
function getWakaFunc(){
var threads = getWakamail();
threads.forEach((thread) => {
let messages = thread.getMessages();
let plainBodies = [];
messages.forEach((message) => {
var kennmei = message.getSubject().slice(1,7);
if(kennmei === 'weekly'){
plainBodies.push(message.getPlainBody());
}else{
plainBodies = null;
}
})
if(plainBodies){
const splitPlainBodies = plainBodies[0].split('\n')
const totalTime = splitPlainBodies[0].match(/(..) hrs (..) mins/)
//Logger.log(totalTime)
const reportRange = splitPlainBodies[1].split('?')
const startEndRange = reportRange[1].split('&').map((range) => {
let splitRange = range.split('=')
return splitRange[1]
})
//Logger.log(startEndRange)
let languages = []
let frag = 0
splitPlainBodies.forEach(body => {
//Logger.log(body)
if(body.match(/(Languages:)/)){
frag = 1
}
if(body.match(/(Editors:)/)){
frag = 0
}
if(frag === 1){
languages.push(body)
}
})
const mapLanguages = languages.slice(1, -2).map((lang) => {
return lang.trim().split(':')
})
//Logger.log(mapLanguages)
// spreadSheetの下に追加させる関数
writeSpreadSheetFunc(startEndRange.join(' until '), totalTime, mapLanguages)
var label = GmailApp.getUserLabelByName("Gas処理済み");
thread.addLabel(label);
}else{
return;
}
})
}
// spreadSheetの下に追加させる関数
function writeSpreadSheetFunc(range, weekTotalTime, languages){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow() + 1;
sheet.getRange(lastRow, 1).setValue(range);
sheet.getRange(lastRow, 2).setValue(weekTotalTime);
let n = 0;
languages.forEach((lang) => {
sheet.getRange(lastRow + n, 3).setValue(lang[0])
sheet.getRange(lastRow + n, 4).setValue(lang[1])
n++
})
}
정규식을 사용하여 문자열을 정돈하는 것이 어려웠습니다. 덕분에 조금 익숙한
다음과 같이 정리할 수 있다.
최근에는 Node.js만
보다 상세한 데이터를 원하면 WakatimeAPI라든지 사용해 보겠습니다.
Reference
이 문제에 관하여(【Wakatime으로부터 주일로 도착하는 메일을 GAS로 SpreadSheet에 자동 전기한다】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ueken3pei/items/7f41eb236bbeeb6f0c12텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)