前言
之前的句子中,如何翻译成python的“优雅”调用?我们把翻译的面纱一层一层地解开的方法写得很清楚,笔者说那只是脑洞的开始。现在笔者回来了。我想和外国哥哥姐姐见面,让他们激动,进行交流,但当英语水平或其他水平还在晋升阶段时,这个小工具可以帮助我度过难关。在这篇文章中,我将详细说明这个翻译的具体实现!实现的主要功能:通过微信聊天听到几个重要密码,打开自己说的话的翻译模式和对面说的话的翻译模式!
设计思路:前面有调用翻译,可以结合翻译界面和微信API做有趣的事情。主要利用微信API监控自己发送的消息,然后将部分关键词判断转换为开关,修改翻译语言等(逻辑可以自己设置),然后请求适当的翻译,利用程序自动发送翻译,然后传递给对方。然后假装把自己当成无知的幼苗——看看如何操作(手动滑稽)
当然,如果你有韩国朋友,他说的话请自动翻译成中文发给我,你说的话请自动翻译成韩文发给我。有本事的小哥哥姐姐可以试试养女娃娃!
详细设计
因为前面的想法很明确,所以我们一步一步地,如何克服其中的各种问题。主要的两个方面之一是将不同的规则翻译成单独的微信API和单独的请求,另一方面是将两者集成在一起,进行人性化的工作!
当然,解决这两点,你可以自己实现逻辑开关,我可以用我的逻辑简单地实现。
环境:win/linux
编译器:pycharm
附加模块:itchat、requests
微信API
微信方面公开了微信网页版API。python的itchat模块立即可用。当然,摸索也需要时间。我放了几个必要的学习阶段。
1.itchat模块的扫码登录后不需要添加参数,但添加此hotReaload后短期内不需要使用扫码。否则,每次启动扫描码都会延迟效率。
Importitchat
I(hotReload=True)
2.发送消息的API也很简单。后面的userName是用户唯一的加密字段。当然,文件传输助手有专用id,其他搜索朋友名称可以通过返回的JSON字符串使用。不管怎样,这个字段很好得。
I(“你好”,toUserName=userName)
3.最重要的是信息监听。为了监听信息,大部分百度到达的结果是把程序变成机器人,听到对面的消息后自动回复。但是笔者想要的不是这种效果。我是在监听和分析自己移动端的微信信息。
对于正常的监听都是这样
#注册消息响应事件。消息类型是I,即文本消息。也可以听各种类型的自行百度。
@i(i)
Deftext_reply(msg):
return msg[' Text ']#收到与return' string '相反的消息后,将发送到机器人
I()
但是,如果你再次做其中的print(msg),你发送的信息也会收到。这里是from you send to he/she。因此,您可以获得内部内容,并自己使用itchat通过send的API主动发送消息。当然,你发送的内容主体等各种信息都在里面,py正好方便操作词典。
_iz=31825&from=ar;x-expires=1705686781&x-signature=zT0sgLFUrj5v4%2BErN9ShwROoBeA%3D&index=3" width="640" height="270"/>
那么这部分的最终设计是这样的:
其中如果是对面发来的消息我们直接return 字符串就会发送,如果是自己发的消息,自己send调用发送信息即可!
# 注册消息响应事件,消息类型为i,即文本消息
@i(i)
def text_reply(msg):
#xxxxx 逻辑处理如果自己发
i(transtr, toUserName=msg['ToUserName'])#将字符串transtr发给你发的人
#xxxxx 逻辑处理如果ta发
return transtr#这个加上是如果对面发消息的监听。也就是对面发消息过来你直接return就会自动发送
i()
有道api
对于其他的前面已经分析过,这里需要注意的是翻译成的语言,比如中翻译英(en)、日语(ja)、韩语(ko)等等。所以你点几个典型的放到逻辑处理里面就好了。
整体逻辑
当然,我想写个逻辑可以控制发送翻译的开始、结束。所以我监听用两个个Boolean类型控制整个开始和暂停,其中jud用来判断自己是否开启自己说的话的装(b)翻译模式。而参数isreturn用来控制判断是否翻译洋娃娃说的话。关键词这里我选开始作为开始,停止作为结束控制自己说的话。而翻译模式,停止翻译则用来控制开始和停止说的话。英语、日语、韩语、法语、等作为翻译语言更改的关键词。
那么,一旦程序跑起来,一切都在我们的掌控之中,当然,测试过效率,虽然那个itchat,和有道翻译的数据都是通过http传输的,但是其实效率还行,对于聊天来说传输效率是可以接受的。延迟不算很大,能满足基本需求。但是切记不要太快太频繁哈,防止有道把你的ip封了你就无法请求了。
代码和运行结果
就这样,我把项目的代码完整的供出来。
项目github地址(微信模块):
欢迎star!
#更多请关注公众号:bigsai
import itchat
import requests
import hashlib
import time
import urllib.parse
jud=False#默认是先不开启
isreturn=False#是否回复
To='en'#翻译成的语言默认是英语
def nmd5(str):#md5加密
m = ()
b = (encoding='utf-8')
m.update(b)
str_md5 = m.hexdigest()
return str_md5
def formdata(transtr):
# 待加密信息
global To
headerstr = '5.0 (Windows NT 10.0; WOW64) AppleWebKi (KHTML, like Gecko) Chrome Safari;
bv=nmd5(headerstr)
ts=str(round()*1000))
salt=ts+'90'
strexample='fanyideskweb'+transtr+salt+'n%A-rKaT5fb[Gy?;N5@Tj'
sign=nmd5(strexample)
i=len(transtr)
dict={'i':transtr,'from':'AUTO','to':To,'smartresult': 'dict',
'client':'fanyideskweb',
'salt':salt,
'sign':sign,
'ts':ts,
'bv':bv,
'doctype':'json',
'version':'2.1',
'keyfrom':';,
'action':'FY_BY_REALTlME'
}
return dict
url=';smartresult=rule'
header={'User-Agent':'Mozilla (Windows NT 10.0; WOW64) AppleWebKi (KHTML, like Gecko) Chrome Safari;,
'Referer':';,
'Origin': ';,
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With':'XMLHttpRequest',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': ';,
'cookie':'_ntes_nnid=937f1c788f1e087cf91d616319dc536a,84; OUTFOX_SEARCH_USER_ID_NCOO=; OUTFOX_SEARCH_USER_ID=-10218418@11.136.67.24; JSESSIONID=; ___rl__test__cookies=1'
}
i(hotReload=True)#登录
# 注册消息响应事件,消息类型为i,文本消息
@i(i)
def text_reply(msg):
# 返回信息调用信息
global jud
global To
global isreturn
text=msg['Text']
dict = formdata(text)
if "翻译模式" in text:
isreturn =True
elif "停止翻译" in text:
isreturn=False
if "开始" in text:
jud=True
elif "停止" in text:
jud=False
elif "英语" in text:
To = 'en'
elif "日语" in text:
To = 'ja'
elif "韩语" in text:
To = 'ko'
elif "法语" in text:
To = 'fr'
if jud:#说明需要运行
dict['to']=To
dict['from']= 'AUTO'
dict = urllib.(dict)
dict = str(dict)
req = reque(url, timeout=1, data=dict, headers=header)
val = req.json()
transtr = val['translateResult'][0][0]['tgt']
print(msg)
i(transtr, toUserName=msg['ToUserName'])
##返回监听对面说的话
if isreturn:
dict['from']='AUTO'
dict['to']='zh-CHS'##翻译成中文
dict = urllib.(dict)
# dict = str(dict)
req = reque(url, timeout=1, data=dict, headers=header)
val = req.json()
transtr = val['translateResult'][0][0]['tgt']
print(msg)
return 'ta说:'+str(transtr)#这个加上是如果对面发消息的监听。比如你是双向翻译可以尝试下
# 绑定消息响应事件后,让itchat运行起来,监听消息
i()
鉴于笔者真没有外国小哥哥小姐姐好友所以只能模拟了
简单运行测试结果(拿队友手机自导自演)
结语
当然,这或许可能很有趣,又或许可能很无聊很简单,只是不同的人可能有不同的看法,不同的时间段、不同的交际都可能有不同的看法,所以请各位大佬不喜勿喷,当然,如果有改进的建议,还请指出!
python相关仓库和项目github地址:/tree/master/%E7%88%AC%E8%99%AB/Include/%E5%BE%AE%E4%BF%A1,(微信文件目录)有兴趣的抓紧去试试吧!如果感觉还行还请各位动动小手点赞转发分享!
欢迎关注公众号:bigsai
欢迎关注头条号:一直码农一直爽
关注我,长期分享知识和乐趣!