import requests from datetime import datetime, timezone, timedelta import logging import json import re # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # 设置 GitHub API URL repo = "coolsnowwolf/lede" url = f"https://api.github.com/repos/{repo}/commits" logging.info(f"设置 GitHub API URL: {url}") # 设置你所在的时区的 UTC 偏移量 utc_offset = timedelta(hours=8) logging.info(f"设置时区偏移量: UTC+{utc_offset}") # 尝试发送请求 try: logging.info("发送请求到 GitHub API...") response = requests.get(url) response.raise_for_status() # 如果响应不是200,将引发HTTPError异常 logging.info("请求成功,状态码: 200") except requests.RequestException as e: logging.error(f"请求错误: {e}") else: commits = response.json() logging.info("成功解析响应 JSON 数据") # 获取最新提交的日期 latest_commit_date_utc = datetime.fromisoformat(commits[0]['commit']['committer']['date'].replace('Z', '+00:00')) latest_commit_date = latest_commit_date_utc.astimezone(timezone(utc_offset)).date() logging.info(f"最新提交日期 (UTC): {latest_commit_date_utc}") logging.info(f"最新提交日期 (本地时区): {latest_commit_date}") # 初始化存储所有相关提交信息的字符串 all_commits_text = "" logging.info("开始遍历提交记录,获取最新日期的提交信息") for commit in commits: commit_date_utc = datetime.fromisoformat(commit['commit']['committer']['date'].replace('Z', '+00:00')) commit_date = commit_date_utc.astimezone(timezone(utc_offset)).date() if commit_date == latest_commit_date: commit_message = commit['commit']['message'] # 移除包含 "Signed-off-by" 的行 commit_message = re.sub(r'^Signed-off-by:.*$', '', commit_message, flags=re.MULTILINE) all_commits_text += commit_message.strip() + "\n" # 清除多余的空格 logging.info(f"找到匹配的提交日期: {commit_date},提交信息: {commit_message}") # 使用 llama3.2 模型翻译 logging.info("开始调用 llama3.2 模型进行翻译") translation_api_url = "https://ollama.aoun.ltd/api/generate" headers = {"Content-Type": "application/json"} # 设置翻译的 prompt,强调技术文档风格 prompt = f""" 你是一位熟悉技术文档、硬件描述和设备树配置的专业翻译员,请准确且简洁地将以下内容从英文翻译成简体中文。 要求: 1. 务必使用 Markdown 格式,但不要使用 ```markdown 标记。 2. 遵循技术术语的准确性,不意译,不简化。 3. 保持原文的标题和分段结构,使用 `###` 作为主标题,`-` 作为每项更新的列表符号。 4. 保证每一项内容之间留有一行空行,适当使用换行符 `\n` 使段落清晰分隔。 5. 忽略任何包含 “Signed-off-by” 的内容。 6. 不要添加任何额外的描述或解释,直接翻译每条内容即可。 以下是需要翻译的内容: {all_commits_text} """ payload = { "model": "llama3.2", "prompt": prompt, "stream": False } try: response = requests.post(translation_api_url, headers=headers, data=json.dumps(payload)) response.raise_for_status() translated_text = response.json().get("response", "翻译失败") logging.info("翻译成功") # 获取当前中国时间 current_time = datetime.now(timezone(utc_offset)) formatted_time = current_time.strftime("%Y年%m月%d日 %H点%M分") logging.info(f"当前时间 (本地): {formatted_time}") # 将时间信息添加到翻译文本前面 final_text = f"{translated_text}" logging.info("格式化翻译文本") # 输出翻译结果到文件 with open('更新日志.txt', 'w', encoding='utf-8') as file: file.write(final_text) logging.info("翻译结果已写入文件 '更新日志.txt'") except Exception as e: logging.error(f"翻译错误: {type(e).__name__}, {str(e)}")