gitea-action-test/翻译更新日志.py
2024-10-28 22:50:54 +08:00

102 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)}")