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 = {}
 | 
				
			||||||
    for k in d:
 | 
					        illegal = False  # 标记是否合法
 | 
				
			||||||
        if not k in exclusion_lst and not k.isnumeric() and not len(k) < 2:
 | 
					        added = False
 | 
				
			||||||
            d2[k] = list(sorted(d[k])) # 原先这里是d2[k] = list(sorted(set(d[k])))
 | 
					        for k in d:
 | 
				
			||||||
    pickle.dump(d2, f)
 | 
					            if k not in exclusion_lst and not k.isnumeric():
 | 
				
			||||||
    f.close()
 | 
					                if is_valid_word(k):  # 只有当单词不合法时进行标记
 | 
				
			||||||
 | 
					                    d2[k] = list(sorted(d[k]))
 | 
				
			||||||
 | 
					                    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)
 | 
					
 | 
				
			||||||
            flash('Added %s.' % (', '.join(request.form.getlist('marked'))))
 | 
					            if pickle_idea2.save_frequency_to_pickle(d, user_freq_record):
 | 
				
			||||||
 | 
					                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