gpt4 book ai didi

javascript - 使用 Gmail 应用脚本按月对标签计数进行分组

转载 作者:行者123 更新时间:2023-12-01 01:05:44 29 4
gpt4 key购买 nike

Google Apps 脚本/javascript 新增功能。

我正在尝试按月对以下代码的结果进行分组,以便将数据用作图表元素,最好的方法是什么:

function listLabels(labelcount) {
var response = Gmail.Users.Labels.list('me');
if (response.labels.length == 0) {
Logger.log('No labels found.');
} else {
Logger.log('Labels:');
for (var i = 0; i < response.labels.length; i++) {
var label = response.labels[i];

// Use the label name to get the messages that match this label
var label_messages = Gmail.Users.Messages.list('me', {
'labelIds': [label.id]
});

Logger.log('%s = %s', label.name, label_messages.resultSizeEstimate);
}
}
}

最佳答案

几个月内标签的分布

此函数收集每个标签每月以及所有月份(无论年份)具有给定标签的消息数。不过,您可以轻松修改它以过滤掉不需要的年份。

每次运行时清除数据后,它都会将数据转储到事件电子表格上。为了方便起见,我将数据放入每月数组中,并使用 join() 方法显示它们,如果您希望扩展它们,您可以通过拆分列来轻松实现,我在其上方添加了一列,其中包含相应月份的第一个字母。

function listLabels() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var response = Gmail.Users.Labels.list('me');
var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
if (response.labels.length) {
sh.clearContents();
sh.appendRow(['Label Name','Monthly Distribution'])
sh.appendRow(['',miA.join(',')])
for (var i = 0; i < response.labels.length; i++) {
var label=response.labels[i];
var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
var msgs=label_messages.messages;
if(msgs) {
var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
for(var j=0;j<msgs.length;j++) {
var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
mA[m]+=1;
lA[m]+=1;
}
sh.appendRow([label.name,lA.join(',')])
}
}
sh.appendRow(['***********************']);
sh.appendRow(['***********************']);
sh.appendRow(['Month','Total Count']);
for(var i=0;i<12;i++) {
sh.appendRow([msA[i],mA[i]]);
}
}
}

这就是输出的样子。

enter image description here

我 chop 了各个标签,因为我不想分享我的私有(private)信息。

历年和历月的标签分布

function listLabelsIncludingYears() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var response = Gmail.Users.Labels.list('me');
var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
var yObj={yA:[]};
if (response.labels.length) {
sh.clearContents();
sh.appendRow(['Label Name','Year','Monthly Distribution'])
sh.appendRow(['','',miA.join(',')])
for (var i = 0; i < response.labels.length; i++) {
var label=response.labels[i];
var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
var msgs=label_messages.messages;
if(msgs) {
var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
for(var j=0;j<msgs.length;j++) {
var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
var y=GmailApp.getMessageById(msgs[j].id).getDate().getFullYear();
if(yObj.hasOwnProperty(y)) {
yObj[y][m]+=1;
}else{
yObj[y]=[0,0,0,0,0,0,0,0,0,0,0,0,0];
yObj.yA.push(y);
yObj[y][m]+=1;
}
lA[m]+=1;
}
sh.appendRow([label.name,y,lA.join(',')]);
}
}
SpreadsheetApp.flush();
sh.getRange(3,1,sh.getLastRow()-2,sh.getLastColumn()).sort({column:2,ascending:true});
sh.getRange(2,3,sh.getLastRow()-1,1).splitTextToColumns(',');
sh.autoResizeColumns(1,sh.getLastColumn())
SpreadsheetApp.flush();
sh.appendRow(['***********************']);
sh.appendRow(['***********************']);
sh.appendRow(['Year','Month','Total Count']);
yObj.yA.sort();
for(var k=0;k<yObj.yA.length;k++) {
for(var i=0;i<12;i++) {
sh.appendRow([yObj.yA[k],msA[i],yObj[y][i]]);
}
}
}
}

我还添加了自动排序、将文本拆分为列以及调整大小。

添加了页面 token 支持

我应其他用户的请求添加了 pagetoken 支持。

function listLabelsIncludingYears() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var response = Gmail.Users.Labels.list('me');
var msA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var miA=['J','F','M','A','M','J','J','A','S','O','N','D']
var mA=[0,0,0,0,0,0,0,0,0,0,0,0];
var yObj={yA:[]};
if (response.labels.length) {
sh.clearContents();
sh.appendRow(['Label Name','Year','Monthly Distribution'])
sh.appendRow(['','',miA.join(',')])
for (var i = 0; i < response.labels.length; i++) {
var label=response.labels[i];
var label_messages = Gmail.Users.Messages.list('me', {'labelIds': [label.id]});
var pagetoken='';
do{
var msgs=label_messages.messages;
if(msgs) {
var lA=[0,0,0,0,0,0,0,0,0,0,0,0];
for(var j=0;j<msgs.length;j++) {
var m=GmailApp.getMessageById(msgs[j].id).getDate().getMonth();
var y=GmailApp.getMessageById(msgs[j].id).getDate().getFullYear();
if(yObj.hasOwnProperty(y)) {
yObj[y][m]+=1;
}else{
yObj[y]=[0,0,0,0,0,0,0,0,0,0,0,0,0];
yObj.yA.push(y);
yObj[y][m]+=1;
}
lA[m]+=1;
}
sh.appendRow([label.name,y,lA.join(',')]);
}
pagetoken=label_messages.nextPageToken;
}while(pagetoken!='');
}
SpreadsheetApp.flush();
sh.getRange(3,1,sh.getLastRow()-2,sh.getLastColumn()).sort({column:2,ascending:true});
sh.getRange(2,3,sh.getLastRow()-1,1).splitTextToColumns(',');
sh.autoResizeColumns(1,sh.getLastColumn())
SpreadsheetApp.flush();
sh.appendRow(['***********************']);
sh.appendRow(['***********************']);
sh.appendRow(['Year','Month','Total Count']);
yObj.yA.sort();
for(var k=0;k<yObj.yA.length;k++) {
for(var i=0;i<12;i++) {
sh.appendRow([yObj.yA[k],msA[i],yObj[y][i]]);
}
}
}
}

Note: page token support has not been tested because I delete most of my emails so I would never trigger the need.

关于javascript - 使用 Gmail 应用脚本按月对标签计数进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55668365/

29 4 0