Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/DataBase/msg.py
This commit is contained in:
shuaikangzhou 2023-12-07 20:37:03 +08:00
commit 9f980fdac1
2 changed files with 65 additions and 1 deletions

View File

@ -226,6 +226,27 @@ class Msg:
# result.sort(key=lambda x: x[5])
return result
def get_messages_by_hour(self, username_, year_='2023'):
sql = '''
SELECT strftime('%H:00',CreateTime,'unixepoch','localtime') as hours,count(MsgSvrID)
from MSG
where StrTalker = ? and strftime('%Y',CreateTime,'unixepoch','localtime') = ?
group by hours
'''
result = None
if not self.open_flag:
return None
try:
lock.acquire(True)
self.cursor.execute(sql, [username_, year_])
result = self.cursor.fetchall()
except sqlite3.DatabaseError:
logger.error(f'{traceback.format_exc()}\n数据库损坏请删除msg文件夹重试')
finally:
lock.release()
# result.sort(key=lambda x: x[5])
return result
def get_first_time_of_message(self, username_):
if not self.open_flag:
return None
@ -269,4 +290,4 @@ if __name__ == '__main__':
pprint(msg.get_message_by_num('wxid_0o18ef858vnu22', local_id))
print(msg.get_messages_by_keyword(wxid, '干嘛'))
pprint(msg.get_messages_by_keyword(wxid, '干嘛')[0])
print(msg.get_first_time_of_message('wxid_0o18ef858vnu22'))
print(msg.get_first_time_of_message('wxid_0o18ef858vnu22'))

View File

@ -146,6 +146,47 @@ def month_count(wxid, year):
}
def hour_count(wxid, year):
"""
小时计数聊天条数
"""
msg_data = msg_db.get_messages_by_hour(wxid, year)
print(msg_data)
y_data = list(map(lambda x: x[1], msg_data))
x_axis = list(map(lambda x: x[0], msg_data))
h = (
Line(init_opts=opts.InitOpts(width=f"{charts_width}px", height=f"{charts_height}px"))
.add_xaxis(xaxis_data=x_axis)
.add_yaxis(
series_name="聊天频率",
y_axis=y_data,
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值", value=int(10)),
]
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均值")]
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="聊天时段", subtitle=None),
# datazoom_opts=opts.DataZoomOpts(),
# toolbox_opts=opts.ToolboxOpts(),
)
.set_series_opts(
label_opts=opts.LabelOpts(
is_show=False
)
)
)
return {
'chart_data': h
}
class Analysis:
pass
@ -158,3 +199,5 @@ if __name__ == '__main__':
print('c:::', c)
m = month_count('wxid_27hqbq7vx5hf22', '2023')
m['chart_data'].render("./data/聊天统计/month_num.html")
h = hour_count('wxid_27hqbq7vx5hf22', '2023')
h['chart_data'].render("./data/聊天统计/hour_count.html")