本地/云端部署 AI 翻译 RSS 订阅源工具
年初的时候,增写过一文《使用 GitHub Action + Google Translate 实现翻译 RSS 订阅源全文》部分解决了从非中文 RSS 订阅源获取消息的问题。
当时的脚本很粗糙,问题也不少,因为工作啥的太忙我也没动力修,最近本想抽空更新一下,结果发现rcy1314大佬已经造好轮子了,在原有的谷歌翻译上,增加了openAI,百度,必应翻译,修正了原来代码翻译出错等问题。于是在此基础上,我增加了部分适配自己习惯的修改,部署到自己的服务器上。
GitHub Action 部署
请直接参考《使用 GitHub Action + Google Translate 实现翻译 RSS 订阅源全文》
Linux 服务器部署(以宝塔面板为例)
首先是确保已安装python3.x版本,然后确保升级pip到最新版本,以及你的网络能正常访问这些订阅源和翻译接口。
主要是使用python(翻译脚本)、nginx(提供网页访问)、cron(定时执行shell),
你可以用你自己习惯的环境替代本文中的组件。
PS:我个人习惯是将虚拟环境和项目实体分开放置,也可以按照你的习惯将虚拟环境放在代码目录下。能看明白这句话的人应该不需要我教怎么做了吧(#逃
拉取代码
SSH登录你的服务器,依次执行如下代码
# 切换至宝塔默认网页目录
cd /www
# 拉取最新代码
git clone https://github.com/tjsky/Rss-Translation.git
建立虚拟环境并安装依赖
避免使用宝塔时在root用户下使用pip可能会导致权限问题和与系统包管理器的冲突。
- 安装虚拟环境工具(virtualenv)
pip install virtualenv
- 创建一个新的虚拟环境:
virtualenv rssenv
这将在当前目录下创建一个名为”rssenv”的虚拟环境。
- 激活虚拟环境:
source rssenv/bin/activate
这将激活虚拟环境,并将您的终端提示符更改为虚拟环境名称类似这样
(rssenv) root@vps:/www# ▮
- 安装依赖
cd Rss-Translation
pip install -r requirements.txt
初始化 RSS 订阅配置
- 删除本项目原有的 rss 文件目录下的 xml 文件
-
在 test.ini 文件中添加需要翻译的 RSS 订阅信息。
[cfg]
base = "rss/"
[source001]
url= "http://feeds.bbci.co.uk/news/rss.xml"
name= "BBC_Top_Stories_rss"
max= "5"
action = "auto"
md5= ""
- 第一行的内容不要动。
- base = “rss/”:生成的文件存放目录
- [source001]:订阅序号,从001开始增长,注意请确保编号不要重复,不然代码会报错
- name = “BBC_Top_Stories_rss”:生成订阅的名称,其中name为英文名不要添加后缀!!!!,本项目生成的文件为固定的.xml格式文件,不需要name有后缀,此外name也不要过长。
- url = “http://feeds.bbci.co.uk/news/rss.xml”:RSS订阅链接
– max = “5”:每次RSS订阅源获取的更新条数,如果你的订阅源为全文订阅(就是会显示一大堆文字的话),请适当减少这个数字的大小,因为脚本使用的翻译接口,有最大字符数限制,一次更新太多(翻译太多)会导致后面的文字没有被翻译。 - md5 = “”:留空即可,将来脚本会自己计算这个数字写入
- action = “auto”:翻译方向,设置为auto会将任意文字翻译为中文,如果想指定可以看这个
源语言->目标语言。比如:en->zh-CN意思就是从英语翻译为中文简体。
修改运行参数
打开README.md文件,请将12行之前的东西按你的实际情况和喜好修改
保持第13行是## 已转换翻译源
,第14行是- source001
就行。
翻译脚本修改订阅源列表是根据行号的,他默认是从第13行开始改。
测试翻译
- 进入对应的python虚拟环境(前边有写)
- 测试翻译(这里以使用bing翻译为例)
python3 Bingtrans.py
- 应该可以看到前边 base 项所设置的 rss 文件夹内出现了翻译后的xml文件。
宝塔面板设定定时任务
在面板计划任务中设置以下命令(注意需要换行,写成5行)
cd /www
source rssenv/bin/activate
cd /Rss-Translation
python3 Bingtrans.py
python3 md2html.py README
这些命令的含义:
1. 切换到工作目录\www
2. 进入虚拟环境rssenv
3. 切换到项目目录\www\Rss-Translation
4. 执行翻译脚本,这里是必应翻译,你可以改成百度或者谷歌啥的
5. 将README.md转化为README.html得到一个订阅源列表网页
部署订阅源网站
- 在面板添加站点内添加一个站点,绑定域名
- 在站点设置-站点目录里将网站目录修改为
/www/Rss-Translation
,点保存按钮。 - 在站点设置-默认文档里增加
README.html
,点添加按钮。 - 这个时候你应该可以访问你的域名时就会看到这样的网页了
- 每条项目的 -> 左侧的是原始订阅链接,右侧是转换后的链接,这个链接和其他的RSS订阅链接一样用就好了。
本地 win 系统下部署
首先是确保已安装python3.x版本,然后确保升级pip到最新版本。
拉取代码
- 打开资源管理器,找一个你喜欢的目录(这里假设你选择了D:\github),以下步骤会在该目录下创建两个文件夹分别为 rssenv 和 Rss-Translation 。
-
在资源管理器地址框里输入
cmd
,并回车,开启命令提示行(用终端也行)
3.拉取项目最新代码
# 拉取项目最新代码
git clone https://github.com/tjsky/Rss-Translation.git
建立虚拟环境并安装依赖
避免你玩其他 Python 项目时出现项目依赖冲突问题
- 安装虚拟环境工具(virtualenv)
pip install virtualenv
pip install virtualenvwrapper
# virtualenvwrapper一定要在virtualenv后安装
- 创建一个新的虚拟环境:
virtualenv rssenv
这将在当前目录下创建一个名为”rssenv”的虚拟环境。
- 激活虚拟环境:
D:\github\rssenv\Scripts\activate
这将激活虚拟环境,并将您的终端提示符更改为虚拟环境名称类似这样
(rssenv) D:\github> ▏
- 安装依赖
cd Rss-Translation
pip install -r requirements.txt
初始化 RSS 订阅配置
- 删除本项目原有的 rss 文件目录下的 xml 文件
-
在 test.ini 文件中添加需要翻译的 RSS 订阅信息。
[cfg]
base = "rss/"
[source001]
url= "http://feeds.bbci.co.uk/news/rss.xml"
name= "BBC_Top_Stories_rss"
max= "5"
action = "auto"
md5= ""
- 第一行的内容不要动。
- base = “rss/”:生成的文件存放目录
- [source001]:订阅序号,从001开始增长,注意请确保编号不要重复,不然代码会报错
- name = “BBC_Top_Stories_rss”:生成订阅的名称,其中name为英文名不要添加后缀!!!!,本项目生成的文件为固定的.xml格式文件,不需要name有后缀,此外name也不要过长。
- url = “http://feeds.bbci.co.uk/news/rss.xml”:RSS订阅链接
– max = “5”:每次RSS订阅源获取的更新条数,如果你的订阅源为全文订阅(就是会显示一大堆文字的话),请适当减少这个数字的大小,因为脚本使用的翻译接口,有最大字符数限制,一次更新太多(翻译太多)会导致后面的文字没有被翻译。 - md5 = “”:留空即可,将来脚本会自己计算这个数字写入
- action = “auto”:翻译方向,设置为auto会将任意文字翻译为中文,如果想指定可以看这个
源语言->目标语言。比如:en->zh-CN意思就是从英语翻译为中文简体。
修改运行参数
打开README.md文件,请将12行之前的东西按你的实际情况和喜好修改
保持第13行是## 已转换翻译源
,第14行是- source001
就行。
翻译脚本修改订阅源列表是根据行号的,他默认是从第13行开始改。
测试翻译
- 进入对应的python虚拟环境(前边有写)
- 测试翻译(这里以使用bing翻译为例)
python3 Bingtrans.py
- 应该可以看到前边 base 项所设置的 rss 文件夹内出现了翻译后的xml文件。
- 获得订阅源列表网页
python md2html.py README
应该可以看到Rss-Translation目录下出现了一个README.html,双击打开。
制作一键启动脚本
在Rss-Translation目录下新建一个run.txt文件并将后缀名改成.bat(小心别改成run.bat.txt了)
复制并根据实际情况修改后保存。
D:\github\rssenv\Scripts\activate
python Bingtrans.py
python md2html.py README
这些命令的含义:
1. 进入虚拟环境rssenv
2. 执行翻译脚本,这里是必应翻译,你可以改成百度或者谷歌啥的
3. 将README.md转化为README.html得到一个订阅源列表网页
定期运行 RSS 翻译并隐藏 CMD 窗口运行
隐藏CMD窗口运行
新建文本文件并改名为run.vbe,打开文件写入如下代码,并保存.(第17行设定运行bat为run.bat)
set ws=wscript.createobject("wscript.shell")
' 获取脚本路径
Function scriptPath(strFileName)
' 将类Unix路径 / 替换为 \
strFileName = Replace(strFileName, "/", "\")
Dim iPos
' 从路径末尾开始搜索\,这样从第一个字符到这个位置
' 就是我们所需要的
iPos = InStrRev(strFileName, "\")
' 使用Left保留需要的部分
scriptPath = Left(strFileName, iPos)
End Function
cmd = """"+scriptPath(WScript.ScriptFullName)+"\run.bat"" /start"
ws.run cmd,0
定期运行
- 打开任务计划程序(直接在开始菜单里搜就行,或者在开始菜单图标上右键→计算机管理→任务计划程序)
- 右侧创建任务
- 常规:名字随便写,选择不管用户是否登录都要运行
- 触发器:新建,选择每天,每隔一天发生一次,重复任务间隔1小时
- 操作:选择前边你设定的那个run.vbe文件的位置
- 条件:勾选“只有在以下网络连接时才启动-任何链接”
lwx
2024-03-26 17:24
我不挂梯子正常点rss链接都能点开,但是我win本地跑Bingtrans.py总是显示连接超时,直到我得把防火墙关了然后再挂个梯子才能正常把rss文件跑出来
去年夏天
2024-03-27 11:19
你的防火墙是不是拦截了py程序的通信?
lwx
2024-03-26 17:19
win本地运行md2html.py,出现了
[Running] python -u “d:\Sortware\RSS rendering\Rss-Translation\md2html.py”
Traceback (most recent call last):
File “d:\Sortware\RSS rendering\Rss-Translation\md2html.py”, line 26, in
main(sys.argv[1:])
File “d:\Sortware\RSS rendering\Rss-Translation\md2html.py”, line 14, in main
name = argv[0]
~~~~^^^
IndexError: list index out of range
不是很懂怎么操作
去年夏天
2024-03-27 11:26
这个报错的意思是,没有给md2html.py传入需要他转换为html的文件名。
完整的命令应该是
python md2html.py README
h后面的
README
,是指同文件夹下的README.md
文件