本地/云端部署 AI 翻译 RSS 订阅源工具

浏览: 1,083 次浏览 作者: 去年夏天 分类: Ubuntu,Windows,佳软推荐,技术文章 发布时间: 2023-11-24 17:46

年初的时候,增写过一文《使用 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可能会导致权限问题和与系统包管理器的冲突。

  1. 安装虚拟环境工具(virtualenv)
pip install virtualenv
  1. 创建一个新的虚拟环境:
virtualenv rssenv

这将在当前目录下创建一个名为”rssenv”的虚拟环境。

  1. 激活虚拟环境:
source rssenv/bin/activate

这将激活虚拟环境,并将您的终端提示符更改为虚拟环境名称类似这样

(rssenv) root@vps:/www# ▮
  1. 安装依赖
cd Rss-Translation
pip install -r requirements.txt

初始化 RSS 订阅配置

  1. 删除本项目原有的 rss 文件目录下的 xml 文件

  2. 在 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行开始改。

测试翻译

  1. 进入对应的python虚拟环境(前边有写)
  2. 测试翻译(这里以使用bing翻译为例)
python3 Bingtrans.py
  1. 应该可以看到前边 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得到一个订阅源列表网页

部署订阅源网站

  1. 在面板添加站点内添加一个站点,绑定域名
  2. 在站点设置-站点目录里将网站目录修改为/www/Rss-Translation,点保存按钮。
  3. 在站点设置-默认文档里增加README.html,点添加按钮。
  4. 这个时候你应该可以访问你的域名时就会看到这样的网页了
  5. 每条项目的 -> 左侧的是原始订阅链接,右侧是转换后的链接,这个链接和其他的RSS订阅链接一样用就好了。

本地 win 系统下部署

首先是确保已安装python3.x版本,然后确保升级pip到最新版本。

拉取代码

  1. 打开资源管理器,找一个你喜欢的目录(这里假设你选择了D:\github),以下步骤会在该目录下创建两个文件夹分别为 rssenv 和 Rss-Translation 。

  2. 在资源管理器地址框里输入cmd,并回车,开启命令提示行(用终端也行)

3.拉取项目最新代码

# 拉取项目最新代码
git clone https://github.com/tjsky/Rss-Translation.git

建立虚拟环境并安装依赖

避免你玩其他 Python 项目时出现项目依赖冲突问题

  1. 安装虚拟环境工具(virtualenv)
pip install virtualenv
pip install virtualenvwrapper
# virtualenvwrapper一定要在virtualenv后安装
  1. 创建一个新的虚拟环境:
virtualenv rssenv

这将在当前目录下创建一个名为”rssenv”的虚拟环境。

  1. 激活虚拟环境:
D:\github\rssenv\Scripts\activate

这将激活虚拟环境,并将您的终端提示符更改为虚拟环境名称类似这样

(rssenv) D:\github> ▏
  1. 安装依赖
cd Rss-Translation
pip install -r requirements.txt

初始化 RSS 订阅配置

  1. 删除本项目原有的 rss 文件目录下的 xml 文件

  2. 在 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行开始改。

测试翻译

  1. 进入对应的python虚拟环境(前边有写)
  2. 测试翻译(这里以使用bing翻译为例)
python3 Bingtrans.py
  1. 应该可以看到前边 base 项所设置的 rss 文件夹内出现了翻译后的xml文件。

  1. 获得订阅源列表网页
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. 打开任务计划程序(直接在开始菜单里搜就行,或者在开始菜单图标上右键→计算机管理→任务计划程序)
  2. 右侧创建任务
    • 常规:名字随便写,选择不管用户是否登录都要运行
    • 触发器:新建,选择每天,每隔一天发生一次,重复任务间隔1小时
    • 操作:选择前边你设定的那个run.vbe文件的位置
    • 条件:勾选“只有在以下网络连接时才启动-任何链接”
4 条评论
  • lwx

    2024-03-26 17:24

    我不挂梯子正常点rss链接都能点开,但是我win本地跑Bingtrans.py总是显示连接超时,直到我得把防火墙关了然后再挂个梯子才能正常把rss文件跑出来

    1. 去年夏天

      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
    不是很懂怎么操作

    1. 去年夏天

      2024-03-27 11:26

      这个报错的意思是,没有给md2html.py传入需要他转换为html的文件名。
      完整的命令应该是python md2html.py README
      h后面的README,是指同文件夹下的README.md文件

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据