11
This commit is contained in:
+39
-1
@@ -4,6 +4,8 @@ import matplotlib.pyplot as plt
|
||||
from matplotlib.font_manager import FontProperties
|
||||
from io import BytesIO
|
||||
import base64
|
||||
from datetime import datetime
|
||||
import calendar
|
||||
|
||||
def load_template(template_name):
|
||||
"""
|
||||
@@ -164,4 +166,40 @@ def plot_line_chart_base64(data, x_field, y_field, title=None, reverse_x=False):
|
||||
plt.close()
|
||||
|
||||
img_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8')
|
||||
return f"data:image/png;base64,{img_base64}"
|
||||
return f"data:image/png;base64,{img_base64}"
|
||||
|
||||
|
||||
def build_calendar_items(start_date_str, data):
|
||||
start_date = datetime.datetime.strptime(start_date_str, "%Y-%m-%d").date()
|
||||
weekday = start_date.weekday() # 周一0 ~ 周日6
|
||||
weekday = (weekday + 1) % 7 # 调整:周日=0, 周一=1 ... 周六=6
|
||||
|
||||
result = []
|
||||
row = []
|
||||
|
||||
# 第一行补空
|
||||
for _ in range(weekday):
|
||||
row.append({"date": "", "items": [], "is_today": False})
|
||||
|
||||
# 排数据
|
||||
for i, day in enumerate(data):
|
||||
# 识别今天
|
||||
is_today = (day["date"] == start_date_str)
|
||||
|
||||
row.append({
|
||||
"date": day["day"],
|
||||
"items": [day],
|
||||
"is_today": is_today,
|
||||
})
|
||||
|
||||
if len(row) == 7:
|
||||
result.append(row)
|
||||
row = []
|
||||
|
||||
# 最后一行剩余补空
|
||||
if row:
|
||||
while len(row) < 7:
|
||||
row.append({"date": "", "items": [], "is_today": False})
|
||||
result.append(row)
|
||||
|
||||
return result
|
||||
+10
-5
@@ -7,7 +7,7 @@ from astrbot.api import AstrBotConfig
|
||||
|
||||
from .request import APIClient
|
||||
from .aiosqlite import AsyncSQLite
|
||||
from .function_basic import load_template,flatten_field,extract_fields,gold_to_string
|
||||
from .function_basic import load_template,gold_to_string,build_calendar_items
|
||||
|
||||
class JX3Service:
|
||||
def __init__(self, api_config, config:AstrBotConfig):
|
||||
@@ -159,19 +159,24 @@ class JX3Service:
|
||||
data: Optional[Dict[str, Any]] = await self._base_request(
|
||||
"jx3_richangyuche", "GET", params=params
|
||||
)
|
||||
logger.info(f"richang 接口返回数据: {data}")
|
||||
if not data:
|
||||
return_data["msg"] = "获取接口信息失败"
|
||||
return return_data
|
||||
|
||||
# 3. 处理返回数据
|
||||
try:
|
||||
# 格式化字符串,利用字典的 get 方法提供默认值
|
||||
|
||||
return_data["code"] = 0
|
||||
return_data["data"]["items"] = build_calendar_items(data["today"]["date"],data["data"])
|
||||
except Exception as e:
|
||||
logger.error(f"richang 数据处理时出错: {e}")
|
||||
return_data["msg"] = "处理接口返回信息时出错"
|
||||
# 加载模板
|
||||
try:
|
||||
return_data["temp"] = load_template("richangyuche.html")
|
||||
except FileNotFoundError as e:
|
||||
logger.error(f"加载模板失败: {e}")
|
||||
return_data["msg"] = "系统错误:模板文件不存在"
|
||||
|
||||
return_data["code"] = 200
|
||||
|
||||
return return_data
|
||||
|
||||
|
||||
Reference in New Issue
Block a user