使用脚本将英文rss转成中文rss

2022/05/08

前言

本文中我们将英文rss 自动转成中文 rss供ttrss使用。(利用谷歌翻译)

方便在手机上进行阅读或者收听。

举例

国外有很多不错的rss源,比如:

转成中文rss
转成中文rss

脚本

使用 Translate 和 BeautifulSoup 项目

# coding:utf-8 
from pygtrans import Translate
from bs4 import BeautifulSoup
# pip 安装
# pip install pygtrans BeautifulSoup -i https://pypi.org/simple
# ref:https://zhuanlan.zhihu.com/p/390801784
# ref:https://beautifulsoup.readthedocs.io/zh_CN/latest/

# client = Translate()
# text = client.translate('Google Translate')
# print(text.translatedText)  # 谷歌翻译
import sys
from urllib import request
import feedparser

args = sys.argv
URL="http://www.mckinsey.com/insights/rss"

BASE="/home/xxx/www/"


def tran(url=URL,out_dir=BASE+"mckinsey_rss.xml"):
    GT = Translate()
    content= request.urlopen(url).read().decode('utf8')
    # 变tag,以使用谷歌翻译
    content=content.replace('title>', 'stitle>') #谷歌翻译会将很多titile去掉,所以需要换一个tag
    content=content.replace( '<pubDate>','<pubDate><span translate="no">') 
    # 谷歌翻译对<span translate="no"> </span> 不翻译。
    content=content.replace( '</pubDate>','</span></pubDate>')
    #print(content)
    
    
    _text = GT.translate(content)
    
    with open(out_dir,'w',encoding='utf-8') as f:
        c=_text.translatedText
        # 还原tag
        c=c.replace('stitle>', 'title>')
        c=c.replace('<span translate="no">', '')
        c=c.replace('</span></pubDate>', '</pubDate>')
        
        
        f.write(c)
        #f.write(content)
    print("GT: "+ url +" > "+ out_dir)

if len(args)==1:
    tran()
else:
    tran(args[1],args[2])



def tran_nature(url="http://rss.acast.com/nature",out_dir=BASE+"nature_rss.xml"):
    GT = Translate()
    
    html_doc=request.urlopen(url).read().decode('utf8')
    soup = BeautifulSoup(html_doc)

    items=soup.find_all('item')
    # nature post内容太多,谷歌api翻译不了,去掉一些
    for idx,e in enumerate(items):
        if idx >8:
                e.decompose()
    
    content= str(soup)
    content=content.replace('title>', 'stitle>')
    content=content.replace( '<pubdate>','<pubDate><span translate="no">')
    content=content.replace( '</pubdate>','</span></pubdate>')
    #print(content)
    
    
    _text = GT.translate(content)
    
    with open(out_dir,'w',encoding='utf-8') as f:
        c=_text.translatedText
        c=c.replace('stitle>', 'title>')
        c=c.replace('<span translate="no">', '')
        c=c.replace('</span></pubdate>', '</pubDate>') # 对于ttrss需要为pubDate才会识别正确
        c=c.replace('&gt','>') # &gt 会影响识别
        
        
        f.write(c)
        #f.write(content)
    print("GT: "+ url +" > "+ out_dir)


tran_nature()

定时任务

注意激活一下miniconda3 这个命令source /home/xxx/miniconda3/bin/activate

放到 /etc/cron.daily/

#!/bin/bash
source /home/xxx/miniconda3/bin/activate
python /home/xxx/txxx.py

其他