8
8
import operator
9
9
from .translator_lite .apis import youdao
10
10
from io import BytesIO
11
- import yaml
12
11
import random
13
- import time
12
+ import asyncio
14
13
from hoshino import R
15
14
15
+ # 随机挑选一个小可爱作为header
16
16
user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" ,
17
17
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" ,
18
18
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" ,
19
19
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36" ,
20
20
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" ,
21
21
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" ,
22
22
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15" ,
23
- ]
23
+ ]
24
24
25
+ # 新闻类
25
26
class news_class :
26
27
def __init__ (self ,news_time ,news_url ,news_title ):
27
28
self .news_time = news_time
28
29
self .news_url = news_url
29
30
self .news_title = news_title
30
31
31
- def get_item ():
32
- time .sleep (1 )
32
+ # 获取列表
33
+ async def get_item ():
34
+ await asyncio .sleep (0.5 )
33
35
url = 'https://umamusume.jp/api/ajax/pr_info_index?format=json'
34
36
data = {}
35
37
data ['announce_label' ] = 0
@@ -46,13 +48,14 @@ def get_item():
46
48
'accept-language' : 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' ,
47
49
'content-type' : 'application/json;charset=UTF-8'
48
50
}
49
- with requests .post (url = url ,data = json .dumps (data ),headers = headers , timeout = (5 ,10 ), stream = True ) as res :
51
+ with requests .post (url = url , data = json .dumps (data ), headers = headers , timeout = (5 ,10 ), stream = True ) as res :
50
52
res_dict = res .json ()
51
53
res .close ()
52
54
return res_dict
53
55
54
- def sort_news ():
55
- res_dict = get_item ()
56
+ # 调整新闻列表
57
+ async def sort_news ():
58
+ res_dict = await get_item ()
56
59
news_list = []
57
60
for n in range (0 , 5 ):
58
61
if (res_dict ['information_list' ][n ]['update_at' ] == None ):
@@ -69,26 +72,26 @@ def sort_news():
69
72
news_list .sort (key = news_key , reverse = True )
70
73
return news_list
71
74
72
- def get_news ():
73
- news_list = sort_news ()
75
+ # 获取新闻
76
+ async def get_news ():
77
+ news_list = await sort_news ()
74
78
msg = '◎◎ 马娘官网新闻 ◎◎\n '
75
79
for news in news_list :
76
80
time_tmp = datetime .datetime .strptime (news .news_time , '%Y-%m-%d %H:%M:%S' )
77
81
news_time = time_tmp - timedelta (hours = 1 )
78
82
msg = msg + '\n ' + str (news_time ) + '\n ' + news .news_title + '\n ' + news .news_url + '\n '
79
83
current_dir = os .path .join (os .path .dirname (__file__ ), 'prev_time.yml' )
80
84
prev_time = news_list [0 ].news_time
81
- file = open (current_dir , 'w' , encoding = "UTF-8" )
82
- file .write (str (prev_time ))
83
- file .close ()
85
+ with open (current_dir , 'w' , encoding = "UTF-8" ) as f :
86
+ f .write (str (prev_time ))
84
87
return msg
85
88
86
- def news_broadcast ():
87
- news_list = sort_news ()
89
+ # 获取新闻更新
90
+ async def news_broadcast ():
91
+ news_list = await sort_news ()
88
92
current_dir = os .path .join (os .path .dirname (__file__ ), 'prev_time.yml' )
89
- file = open (current_dir , 'r' , encoding = "UTF-8" )
90
- init_time = str (file .read ())
91
- file .close ()
93
+ with open (current_dir , 'r' , encoding = "UTF-8" ) as f :
94
+ init_time = str (f .read ())
92
95
init_time = datetime .datetime .strptime (init_time , '%Y-%m-%d %H:%M:%S' )
93
96
msg = '◎◎ 马娘官网新闻更新 ◎◎\n '
94
97
for news in news_list :
@@ -103,32 +106,27 @@ def news_broadcast():
103
106
for news in news_list :
104
107
set_time = news .news_time
105
108
break
106
- file = open (current_dir , 'w' , encoding = "UTF-8" )
107
- file .write (str (set_time ))
108
- file .close ()
109
+ with open (current_dir , 'w' , encoding = "UTF-8" ) as f :
110
+ f .write (str (set_time ))
109
111
return msg
110
112
111
113
# 判断一下是否有更新,为什么要单独写一个函数呢
112
114
# 函数单独写一个是怎么回事呢?函数相信大家都很熟悉,但是函数单独写一个是怎么回事呢,下面就让小编带大家一起了解吧。
113
115
# 函数单独写一个,其实就是我想单独写一个函数,大家可能会很惊讶函数怎么会单独写一个呢?但事实就是这样,小编也感到非常惊讶。
114
116
# 这就是关于函数单独写一个的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
115
- def judge () -> bool :
117
+ async def judge () -> bool :
116
118
current_dir = os .path .join (os .path .dirname (__file__ ), 'prev_time.yml' )
117
- if ( os . path . exists ( current_dir ) == True ):
118
- file = open (current_dir , 'r' , encoding = "UTF-8" )
119
- init_time = str ( file . read ())
120
- file . close ( )
119
+ news_list = await sort_news ()
120
+ if os . path . exists (current_dir ):
121
+ with open ( current_dir , 'r' , encoding = "UTF-8" ) as f :
122
+ init_time = str ( f . read () )
121
123
else :
122
- news_list = sort_news ()
123
124
for news in news_list :
124
125
init_time = news .news_time
125
126
break
126
127
current_dir = os .path .join (os .path .dirname (__file__ ), 'prev_time.yml' )
127
- file = open (current_dir , 'w' , encoding = "UTF-8" )
128
- file .write (str (init_time ))
129
- file .close ()
130
-
131
- news_list = sort_news ()
128
+ with open (current_dir , 'w' , encoding = "UTF-8" ) as f :
129
+ f .write (str (init_time ))
132
130
for news in news_list :
133
131
prev_time = news .news_time
134
132
break
@@ -139,7 +137,7 @@ def judge() -> bool:
139
137
return False
140
138
141
139
# 替换不必要的文本
142
- def replace_text (text_tmp ):
140
+ async def replace_text (text_tmp ):
143
141
# 替换多余的html关键字
144
142
text = text_tmp .replace (' ' , ' ' )
145
143
text = re .sub (r'<div.*?>' , '' , text )
@@ -157,24 +155,21 @@ def replace_text(text_tmp):
157
155
text = re .sub (r'<br>' , '\n \n ' , text )
158
156
# 替换赛马娘游戏术语
159
157
current_dir = os .path .join (os .path .dirname (__file__ ), 'replace_dict.json' )
160
- file = open (current_dir , 'r' , encoding = 'UTF-8' )
161
- file_data = file .read ()
162
- file .close ()
163
- config = yaml .load (file_data , Loader = yaml .FullLoader )
164
- keys_list = list (config .keys ())
165
- for key in keys_list :
166
- value = config [key ]
158
+ with open (current_dir , 'r' , encoding = 'UTF-8' ) as other_file :
159
+ other_dict = json .load (other_file )
160
+ for key in list (other_dict .keys ()):
161
+ value = other_dict [key ]
167
162
text = text .replace (f'{ key } ' , f'{ value } ' )
168
163
return text
169
164
170
165
# 翻译完如果把中文又翻译一遍导致出问题可以在这里,再次替换一下?
171
- def second_replace (news_text ):
166
+ async def second_replace (news_text ):
172
167
# news_text = news_text.replace('', '') # 我先注释了
173
168
return news_text
174
169
175
170
# 翻译新闻
176
- def translate_news (news_id ):
177
- time .sleep (1 )
171
+ async def translate_news (news_id ):
172
+ await asyncio .sleep (0.5 )
178
173
url = 'https://umamusume.jp/api/ajax/pr_info_detail?format=json'
179
174
data = {}
180
175
data ['announce_id' ] = news_id
@@ -195,31 +190,31 @@ def translate_news(news_id):
195
190
res_dict = res .json ()
196
191
res .close ()
197
192
if res_dict ['detail' ]['title' ] == '現在確認している不具合について' :
198
- news_msg = res_dict ['detail' ]['message' ][:500 ] + '...'
193
+ news_msg = res_dict ['detail' ]['message' ][:1000 ] + '...'
199
194
flag = 1
200
195
else :
201
196
news_msg = res_dict ['detail' ]['message' ]
202
- news_msg = replace_text (news_msg )
197
+ news_msg = await replace_text (news_msg )
203
198
except :
204
199
news_text = '错误!马娘官网连接失败'
205
200
return news_text
206
201
try :
207
202
news_text = youdao (news_msg , 'ja' , 'zh' )
208
- news_text = second_replace (news_text )
203
+ news_text = await second_replace (news_text )
209
204
if flag == 1 :
210
- news_text = '(该新闻特别长,因此只显示前500个字符 )\n \n ' + news_text
205
+ news_text = '(该新闻特别长,因此只显示前1000个字符 )\n \n ' + news_text
211
206
if res_dict ['detail' ]['image_big' ] != '' :
212
207
img_url = res_dict ['detail' ]['image_big' ]
213
208
response = requests .get (img_url )
214
209
ls_f = base64 .b64encode (BytesIO (response .content ).read ())
215
210
imgdata = base64 .b64decode (ls_f )
216
- save_dir = R .img ('umamusume_news ' ).path
211
+ save_dir = os . path . join ( R .img ('umamusume ' ).path , 'umamusume_news/' )
217
212
path_dir = os .path .join (save_dir ,'news_img.jpg' )
218
213
file = open (path_dir ,'wb' )
219
214
file .write (imgdata )
220
215
file .close ()
221
216
news_img = ' ' .join (map (str , [
222
- R .img (f'umamusume_news/news_img.jpg' ).cqcode ,
217
+ R .img (f'umamusume/ umamusume_news/news_img.jpg' ).cqcode ,
223
218
]))
224
219
news_text = f'{ news_img } ' + news_text
225
220
except Exception as e :
0 commit comments