Skip to content

Commit

Permalink
Merge branch 'mengshouer-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Quan666 committed Aug 24, 2020
2 parents a13b272 + a125119 commit 9813b41
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 19 deletions.
14 changes: 13 additions & 1 deletion config.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,18 @@
# 图片压缩大小 kb * 1024 = MB
ZIP_SIZE = 3 * 1024

blockquote = True #是否显示转发的内容,默认打开
showlottery = True #是否显示互动抽奖信息,默认打开

#使用百度翻译API 可选,填的话两个都要填,不填默认使用谷歌翻译(需墙外?)
# Baidu Translate API
UseBaidu = False
BaiduID = ''
BaiduKEY = ''
#百度翻译接口appid和secretKey,前往http://api.fanyi.baidu.com/获取
#一般来说申请标准版免费就够了,想要好一点可以认证上高级版,有月限额,rss用也足够了


# 解决pixiv.cat无法访问问题
CLOSE_PIXIV_CAT = False # 是否关闭使用 pixiv.cat,关闭后必须启用代理
# 以下两项在关闭使用 pixiv.cat时有效,如果你有自己反代pixiv,填上你自己的反代服务器地址即可,没有不要填
Expand All @@ -37,4 +49,4 @@
# MYELF博客地址 https://myelf.club
# 出现问题请在 GitHub 上提 issues
# 项目地址 https://github.com/Quan666/ELF_RSS
# v1.3.5
# v1.3.7
4 changes: 3 additions & 1 deletion include/plugins/RSSHub/RSS_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ class rss:
time=5 #更新频率 分钟/次
translation=False # 翻译
only_title=False #仅标题
only_pic=False #仅图片
# 定义构造方法
def __init__(self,name:str, url:str, user_id:str, group_id:str,time=5,img_proxy=False,notrsshub=False,translation=False,only_title=False):
def __init__(self,name:str, url:str, user_id:str, group_id:str,time=5,img_proxy=False,notrsshub=False,translation=False,only_title=False,only_pic=False):
self.name = name
self.url = url
if user_id!='-1' :
Expand All @@ -24,6 +25,7 @@ def __init__(self,name:str, url:str, user_id:str, group_id:str,time=5,img_proxy=
self.img_proxy=img_proxy
self.translation=translation
self.only_title=only_title
self.only_pic=only_pic

def geturl(self)->str:
if self.notrsshub :
Expand Down
63 changes: 63 additions & 0 deletions include/plugins/RSSHub/rss_baidutrans.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# coding: utf8
'''
@Author: LCY
@Contact: lchuanyong@126.com
@blog: http://http://blog.csdn.net/lcyong_
@Date: 2018-01-15
@Time: 19:19
说明: appid和secretKey为百度翻译文档中自带的,需要切换为自己的
python2和python3部分库名称更改对应如下:
httplib ----> http.client
md5 ----> hashlib.md5
urllib.quote ----> urllib.parse.quote
官方链接:
http://api.fanyi.baidu.com/api/trans/product/index
'''

import http.client
import hashlib
import json
import urllib
import random
import config


def baidu_translate(content):
appid = config.BaiduID
secretKey = config.BaiduKEY
httpClient = None
myurl = '/api/trans/vip/translate'
q = content
fromLang = 'jp' # 源语言
toLang = 'zh' # 翻译后的语言
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
salt) + '&sign=' + sign

try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
jsonResponse = response.read().decode("utf-8") # 获得返回的结果,结果为json格式
js = json.loads(jsonResponse) # 将json格式的结果转换字典结构
dst = str(js["trans_result"][0]["dst"]) # 取得翻译后的文本结果
return dst # 打印结果
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()


if __name__ == '__main__':
while True:
print("请输入要翻译的内容,如果退出输入q")
content = input()
if (content == 'q'):
break
baidu_translate(content)
44 changes: 33 additions & 11 deletions include/plugins/RSSHub/rsshub.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: UTF-8 -*-
from io import BytesIO

import unicodedata
import feedparser
import json
import codecs
Expand All @@ -23,6 +23,7 @@
from googletrans import Translator
import emoji
import socket
from retrying import retry
# 存储目录
file_path = './data/'
#代理
Expand All @@ -34,6 +35,7 @@
status_code=[200,301,302]
# 去掉烦人的 returning true from eof_received() has no effect when using ssl httpx 警告
asyncio.log.logger.setLevel(40)
@retry
async def getRSS(rss:RSS_class.rss)->list:# 链接,订阅名
#设置全局超时 以解决 feedparser.parse 遇到 bad url 时卡住
#socket.setdefaulttimeout(5000)
Expand All @@ -53,8 +55,6 @@ async def getRSS(rss:RSS_class.rss)->list:# 链接,订阅名
r = await client.get(rss.geturl(),timeout=30)
#print(rss.name+":"+str(r.status_code)+' 长度:'+str(len(r.content)))
d = feedparser.parse(r.content)
#if(len(r.content)<3000):
# print(r.content)
except BaseException as e:
logger.error(e)
if not rss.notrsshub and config.RSSHUB_backup:
Expand Down Expand Up @@ -87,7 +87,7 @@ async def getRSS(rss:RSS_class.rss)->list:# 链接,订阅名
# print(Similarity.quick_ratio())
if Similarity.quick_ratio() <= 0.1: # 标题正文相似度
msg = msg + '标题:' + item['title'] + '\n'
msg = msg + '内容:' + await checkstr(item['summary'], rss.img_proxy, rss.translation) + '\n'
msg = msg + '内容:' + await checkstr(item['summary'], rss.img_proxy, rss.translation, rss.only_pic) + '\n'
else:
msg = msg + '标题:' + item['title'] + '\n'
str_link = re.sub('member_illust.php\?mode=medium&illust_id=', 'i/', item['link'])
Expand Down Expand Up @@ -145,6 +145,7 @@ async def sendMsg(rss,msg,bot):
logger.info('发生错误 消息发送失败 E:'+str(e))

# 下载图片
@retry
async def dowimg(url:str,img_proxy:bool)->str:
try:
img_path = file_path + 'imgs' + os.sep
Expand Down Expand Up @@ -236,23 +237,32 @@ async def zipPic(content,name):
im.save(img_path + name + '.png', 'png')
return name + '.png'


#处理正文
async def checkstr(rss_str:str,img_proxy:bool,translation:bool)->str:
async def checkstr(rss_str:str,img_proxy:bool,translation:bool,only_pic:bool)->str:

# 去掉换行
rss_str = re.sub('\n', '', rss_str)

doc_rss = pq(rss_str)
rss_str = str(doc_rss)

if config.showlottery == False:
if "互动抽奖" in rss_str:
logger.info("内容有互动抽奖,pass")
return

# 处理一些标签
if config.blockquote == True:
rss_str = re.sub('<blockquote>|</blockquote>', '', rss_str)
else:
rss_str = re.sub('<blockquote.*>', '', rss_str)
rss_str = re.sub('<br/><br/>|<br><br>|<br>|<br/>', '\n', rss_str)
rss_str = re.sub('<span>|<span.+?\">|</span>', '', rss_str)
rss_str = re.sub('<pre.+?\">|</pre>', '', rss_str)
rss_str = re.sub('<p>|<p.+?\">|</p>|<b>|<b.+?\">|</b>', '', rss_str)
rss_str = re.sub('<div>|<div.+?\">|</div>', '', rss_str)
rss_str = re.sub('<div>|<div.+?\">|</div>', '', rss_str)
rss_str = re.sub('<blockquote>|</blockquote>', '', rss_str)
rss_str = re.sub('<iframe.+?\"/>', '', rss_str)
rss_str = re.sub('<i.+?\">|<i>|</i>', '', rss_str)
rss_str = re.sub('<code>|</code>|<ul>|</ul>', '', rss_str)
Expand All @@ -277,6 +287,9 @@ async def checkstr(rss_str:str,img_proxy:bool,translation:bool)->str:

# 处理图片
doc_img = doc_rss('img')
if not doc_img and only_pic:
print("没有图片,pass")
return
for img in doc_img.items():
rss_str_tl = re.sub(re.escape(str(img)), '', rss_str_tl)
img_path = await dowimg(img.attr("src"), img_proxy)
Expand Down Expand Up @@ -317,15 +330,24 @@ async def checkstr(rss_str:str,img_proxy:bool,translation:bool)->str:
translator = Translator()
# rss_str_tl = re.sub(r'\n', ' ', rss_str_tl)
try:
text=emoji.demojize(rss_str_tl)
text = emoji.demojize(rss_str_tl)
text = re.sub(r':[A-Za-z_]*:', ' ', text)
text = '\n翻译:\n' + translator.translate(re.escape(text), dest='zh-CN').text
if config.UseBaidu:
from . import rss_baidutrans
rss_str_tl = re.sub(r'\n', '百度翻译 ', rss_str_tl)
rss_str_tl = unicodedata.normalize('NFC', rss_str_tl)
text = emoji.demojize(rss_str_tl)
text = re.sub(r':[A-Za-z_]*:', ' ', text)
text = '\n翻译(BaiduAPI):\n' + rss_baidutrans.baidu_translate(re.escape(text))
else:
text = '\n翻译:\n' + translator.translate(re.escape(text), dest='zh-CN').text
text = re.sub(r'\\', '', text)
text = re.sub(r'百度翻译', '\n', text)
except Exception as e:
text = '\n翻译失败!'+str(e)+'\n'
print()
print(rss_str+text)
print()
#print()
#print("rss_str+text-----"+rss_str+text)
#print()
return rss_str+text


Expand Down
8 changes: 6 additions & 2 deletions include/plugins/add_dy.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
@on_command('add', aliases=('订阅', 'dy', 'DY'))
async def add(session: CommandSession):
# 从会话状态(session.state)中获取订阅信息链接(link),如果当前不存在,则询问用户
rss_dy_link = session.get('add', prompt='要订阅的信息不能为空呢,请重新输入\n输入样例:\ntest /twitter/user/xx 11,11 -1 5 1 0 \n订阅名 订阅地址 qq(,分隔,为空-1) 群号(,分隔,为空-1) 更新时间(分钟,可选) 1/0(代理,可选) 1/0(第三方订阅链接,可选) 1/0(翻译,可选) 1/0(仅标题,可选)')
rss_dy_link = session.get('add', prompt='要订阅的信息不能为空呢,请重新输入\n输入样例:\ntest /twitter/user/xx 11,11 -1 5 1 0 \n订阅名 订阅地址 qq(,分隔,为空-1) 群号(,分隔,为空-1) 更新时间(分钟,可选) 1/0(代理,可选) 1/0(第三方订阅链接,可选) 1/0(翻译,可选) 1/0(仅标题,可选) 1/0(仅图片,可选)')
# 权限判断
user_id = session.ctx['user_id']
if user_id in config.ROOTUSER:
Expand Down Expand Up @@ -51,7 +51,11 @@ async def add(session: CommandSession):
only_title = bool(int(dy[8]))
else:
only_title = False
rss = RSS_class.rss(name, url, user_id, group_id, times, proxy, notrsshub,translation,only_title)
if len(dy) > 9:
only_pic = bool(int(dy[9]))
else:
only_pic = False
rss = RSS_class.rss(name, url, user_id, group_id, times, proxy, notrsshub,translation,only_title,only_pic)
# 写入订阅配置文件 # 先读看是否重复再写
flag = 0
bot = nonebot.get_bot()
Expand Down
4 changes: 3 additions & 1 deletion include/plugins/change_dy.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
@on_command('change')
async def change(session: CommandSession):
change_info = session.get('change',
prompt='输入要修改的订阅的 \n订阅名 修改项=,属性 \n如:\n 订阅 dyqq=,xx dsf=0\n对应参数: 订阅地址-url,订阅QQ-dyqq,订阅群-dyqun,更新频率-uptime,代理-proxy,第三方-dsf,翻译-tl,仅title-ot\n\n注:\n代理、第三方、翻译、仅title属性值为1/0\nqq、群号前加英文逗号表示追加')
prompt='输入要修改的订阅的 \n订阅名 修改项=,属性 \n如:\n 订阅 dyqq=,xx dsf=0\n对应参数: 订阅地址-url,订阅QQ-dyqq,订阅群-dyqun,更新频率-uptime,代理-proxy,第三方-dsf,翻译-tl,仅title-ot,仅图片-op\n\n注:\n代理、第三方、翻译、仅title、仅图片属性值为1/0\nqq、群号前加英文逗号表示追加')
# 权限判断
user_id = session.ctx['user_id']
# print(type(user_id),type(config.ROOTUSER))
Expand Down Expand Up @@ -73,6 +73,8 @@ async def change(session: CommandSession):
rss_tmp.translation = bool(int(info_this[1]))
if info_this[0] == 'ot':
rss_tmp.only_title = bool(int(info_this[1]))
if info_this[0] == 'op':
rss_tmp.only_pic = bool(int(info_this[1]))
list_rss.remove(rss_a)
list_rss.append(rss_tmp)
RWlist.writeRss(list_rss)
Expand Down
2 changes: 1 addition & 1 deletion include/plugins/show_dy.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ async def show(session: CommandSession):
await session.send(
'名称:' + rss_.name + '\n订阅地址:' + rss_.url + '\n订阅QQ:' + str(rss_.user_id) + '\n订阅群:' + str(
rss_.group_id) + '\n更新频率:' + str(rss_.time) + '分钟/次\n代理:' + str(rss_.img_proxy) + '\n第三方:' + str(rss_.notrsshub)
+ '\n翻译:' + str(rss_.translation) + '\n仅标题:' + str(rss_.only_title))
+ '\n翻译:' + str(rss_.translation) + '\n仅标题:' + str(rss_.only_title) + '\n仅图片:' + str(rss_.only_pic))
flag = flag + 1
if flag <= 0:
await session.send('没有找到 ' + rss_name + ' 的订阅哟!')
Expand Down
5 changes: 3 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
googletrans==2.4.0
httpx==0.12.1
emoji==0.5.4
nonebot==1.5.0
googletrans==2.4.0
requests==2.21.0
httpx==0.12.1
feedparser==5.2.1
apscheduler==3.6.3
Pillow==7.2.0
pyquery==1.4.1
retrying==1.3.3

0 comments on commit 9813b41

Please sign in to comment.