forked from mrlan/EnglishPal
Fix bug 563
parent
00ae770195
commit
56c8dc24c6
|
@ -9,8 +9,53 @@
|
||||||
# Note: unlike pick_idea.py, now the second item is not frequency, but a list of dates.
|
# Note: unlike pick_idea.py, now the second item is not frequency, but a list of dates.
|
||||||
|
|
||||||
import pickle
|
import pickle
|
||||||
|
import requests
|
||||||
|
import hashlib
|
||||||
|
import random
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
class BaiduContent:
|
||||||
|
APPID = '20200314000398337' # 将'您的APPID'替换为实际的APPID
|
||||||
|
KEY = 'uZ6Sdwz_V1zu9q1peowk' # 将'您的密钥'替换为实际的API密钥
|
||||||
|
|
||||||
|
def generate_sign(appid, q, salt, key):
|
||||||
|
sign_str = appid + q + str(salt) + key
|
||||||
|
sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
|
||||||
|
return sign
|
||||||
|
def is_valid_word(word):
|
||||||
|
url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
|
||||||
|
salt = random.randint(32768, 65536)
|
||||||
|
sign = generate_sign(BaiduContent.APPID, word, salt, BaiduContent.KEY)
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'q': word,
|
||||||
|
'from': 'en',
|
||||||
|
'to': 'zh',
|
||||||
|
'appid': BaiduContent.APPID,
|
||||||
|
'salt': salt,
|
||||||
|
'sign': sign
|
||||||
|
}
|
||||||
|
|
||||||
|
headers = {'Content-Type': "application/x-www-form-urlencoded"}
|
||||||
|
data = urlencode(params).encode('utf-8')
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(url, data=data, headers=headers)
|
||||||
|
if response.status_code == 200:
|
||||||
|
data = response.json()
|
||||||
|
# print(data['trans_result'][0]['dst'])
|
||||||
|
# 检查是否含有翻译结果,并判断翻译后的文本是否与原文不同
|
||||||
|
if 'trans_result' in data and data['trans_result'][0]['dst'] != word:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
except requests.RequestException:
|
||||||
|
return False
|
||||||
|
|
||||||
def lst2dict(lst, d):
|
def lst2dict(lst, d):
|
||||||
'''
|
'''
|
||||||
Store the information in list lst to dictionary d.
|
Store the information in list lst to dictionary d.
|
||||||
|
@ -61,17 +106,30 @@ def load_record(pickle_fname):
|
||||||
f.close()
|
f.close()
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
# exclusion_lst = ['one', 'no', 'has', 'had', 'do', 'that', 'have', 'by', 'not', 'but', 'we', 'this', 'my', 'him', 'so', 'or', 'as', 'are', 'it', 'from', 'with', 'be', 'can', 'for', 'an', 'if', 'who', 'whom', 'whose', 'which', 'the', 'to', 'a', 'of', 'and', 'you', 'i', 'he', 'she', 'they', 'me', 'was', 'were', 'is', 'in', 'at', 'on', 'their', 'his', 'her', 's', 'said', 'all', 'did', 'been', 'w']
|
||||||
def save_frequency_to_pickle(d, pickle_fname):
|
def save_frequency_to_pickle(d, pickle_fname):
|
||||||
f = open(pickle_fname, 'wb')
|
with open(pickle_fname, 'wb') as f: # 使用 with 语句自动处理文件关闭
|
||||||
exclusion_lst = ['one', 'no', 'has', 'had', 'do', 'that', 'have', 'by', 'not', 'but', 'we', 'this', 'my', 'him', 'so', 'or', 'as', 'are', 'it', 'from', 'with', 'be', 'can', 'for', 'an', 'if', 'who', 'whom', 'whose', 'which', 'the', 'to', 'a', 'of', 'and', 'you', 'i', 'he', 'she', 'they', 'me', 'was', 'were', 'is', 'in', 'at', 'on', 'their', 'his', 'her', 's', 'said', 'all', 'did', 'been', 'w']
|
exclusion_lst = []
|
||||||
d2 = {}
|
d2 = {}
|
||||||
|
illegal = False # 标记是否合法
|
||||||
|
added = False
|
||||||
for k in d:
|
for k in d:
|
||||||
if not k in exclusion_lst and not k.isnumeric() and not len(k) < 2:
|
if k not in exclusion_lst and not k.isnumeric():
|
||||||
d2[k] = list(sorted(d[k])) # 原先这里是d2[k] = list(sorted(set(d[k])))
|
if is_valid_word(k): # 只有当单词不合法时进行标记
|
||||||
pickle.dump(d2, f)
|
d2[k] = list(sorted(d[k]))
|
||||||
f.close()
|
added =True
|
||||||
|
else:
|
||||||
|
illegal = True # 标记至少处理了一个有效单词
|
||||||
|
|
||||||
|
if illegal:
|
||||||
|
if not added:
|
||||||
|
pickle.dump({}, f)
|
||||||
|
else:
|
||||||
|
pickle.dump(d2, f)
|
||||||
|
return 0 # 返回0表示成功处理存在非法单词
|
||||||
|
else:
|
||||||
|
pickle.dump(d2, f)
|
||||||
|
return 1 # 返回1表示成功处理并保存至少一个单词
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -184,8 +184,11 @@ def user_mark_word(username):
|
||||||
if len(lst_history) > 999:
|
if len(lst_history) > 999:
|
||||||
flash('You have way too many words in your difficult-words book. Delete some first.')
|
flash('You have way too many words in your difficult-words book. Delete some first.')
|
||||||
else:
|
else:
|
||||||
pickle_idea2.save_frequency_to_pickle(d, user_freq_record)
|
|
||||||
|
if pickle_idea2.save_frequency_to_pickle(d, user_freq_record):
|
||||||
flash('Added %s.' % (', '.join(request.form.getlist('marked'))))
|
flash('Added %s.' % (', '.join(request.form.getlist('marked'))))
|
||||||
|
else:
|
||||||
|
flash('%s.存在非法单词' % (', '.join(request.form.getlist('marked'))))
|
||||||
return redirect(url_for('user_bp.userpage', username=username))
|
return redirect(url_for('user_bp.userpage', username=username))
|
||||||
else:
|
else:
|
||||||
return 'Under construction'
|
return 'Under construction'
|
||||||
|
|
Loading…
Reference in New Issue