再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!
前言
在前面的一篇文章如何用python“优雅的”调用有道翻译中咱们清楚的写过如何一层一层的解开有道翻译的面纱,并且笔者说过那只是脑洞的开始。现在笔者又回来了。当你遇到一些外国小哥哥小姐姐很心动、想结识交流,但英语水平或其他水平还在提升阶段,这个小工具可以帮你渡过难关!Teach you how to flirt gracefully with code。在本文中,我将详细讲解这个翻译的具体实现!对于实现的主要功能:通过微信聊天监听一些关键的口令,开启自己说的话的翻译模式和对面说的话的翻译模式!
在这里插入图片描述
设计思路:前面有了调用翻译,我们可以和翻译接口
和微信的api
结合起来做一些有趣的事情,主要就是利用微信api对自己发的消息进行监测,然后有些关键字判断
作为开关、修改翻译语言等等(逻辑可以自己设置),接着去请求有道翻译,利用程序自动发送翻译的话给对方。然后再假装把自己当成一无所知的萌新------看你怎么操作了(手动滑稽)
当然,如果你有个韩国朋友,他说的话自动翻成中文,发给你,你说的话自动翻成韩文再发给他。有本事有资源的小哥哥小姐姐可以去试试洋妞洋娃娃!
在这里插入图片描述
详细设计
既然前面的思路很明确了,那么咱么一步一步来,如何攻克其中的种种问题。主要两个方面,一个
是单独的微信api和单独的请求有道翻译一些其他规则,另一
方面是将两者整合起来,可以让人人性化的操作!
当然解决了这两项之后,你就可以自己实现一些逻辑开关,而我就用我的逻辑简单的实现了一下!
环境:win/linux
编译器:pycharm
额外模块:itchat、requests
微信api
微信方公开了微信网页版的api。python中的itchat
模块就可以直接使用。当然摸索起来也是需要时间。有些必要的学习步骤我就放上了。
1 . 对于itchat模块的扫码登录。后面可以不加参数,但是加了这个hotReaload之后短期内可以不需要扫码,不然每次启动扫码耽误效率。
import itchat
itchat.auto_login(hotReload=True)
2 . 至于还有一个发消息的api也很简单,后面的userName是用户的唯一的被加密的字段,当然,文件传输助手有专门id,还有其他搜索好友名通过返回的json串也可以获得用的该id。总之这个字段很好获得。
itchat.send("你好",toUserName = userName)
3 . 最重要的就是消息的监听了,对于消息监听,大部分百度到的结果都是将程序做成机器人,监听对面消息然后自动回复,但是笔者要的不是这个效果,我是想监听自己移动端微信发的消息然后进行分析啥啥啥的。
对于正常的监听都是这样的
# 注册消息响应事件,消息类型为itchat.content.TEXT,即文本消息。也可以监听多种类型可自行百度
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
return msg['Text']#return “字符串” 当接受到对面消息时候,就会发过去充当机器人
itchat.run()
但是,如果你如果再其中print(msg).你会发现你自己发的消息也会被监听到,这里的就是from you send to he/she。所以可以获取里面内容自己利用itchat
发送send
的api
主动发送消息。当然,你发送的内容主体等各种信息都在里面,py正好也很方便操作字典。
在这里插入图片描述
那么这部分的最终设计是这样的:
其中如果是对面发来的消息我们直接return 字符串就会发送,如果是自己发的消息,自己send调用发送信息即可!
# 注册消息响应事件,消息类型为itchat.content.TEXT,即文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
#xxxxx 逻辑处理如果自己发
itchat.send(transtr, toUserName=msg['ToUserName'])#将字符串transtr发给你发的人
#xxxxx 逻辑处理如果ta发
return transtr#这个加上是如果对面发消息的监听。也就是对面发消息过来你直接return就会自动发送
itchat.run()
有道api
对于其他的前面已经分析过,这里需要注意的是翻译成的语言,比如中翻译英(en
)、日语(ja
)、韩语(ko
)等等。所以你点几个典型的放到逻辑处理里面就好了。
在这里插入图片描述
整体逻辑
当然,我想写个逻辑可以控制发送翻译的开始、结束。所以我监听用两个个Boolean类型
控制整个开始和暂停,其中jud
用来判断自己是否开启自己说的话的装(b)翻译模式。而参数isreturn
用来控制判断是否翻译洋娃娃说的话。关键词这里我选开始
作为开始,停止
作为结束控制自己说的话。而翻译模式
,停止翻译
则用来控制开始和停止说的话。英语、日语、韩语、法语、等作为翻译语言更改的关键词。
那么,一旦程序跑起来,一切都在我们的掌控之中,当然,测试过效率,虽然那个itchat,和有道翻译的数据都是通过http传输的,但是其实效率还行,对于聊天来说传输效率是可以接受的。延迟不算很大,能满足基本需求。但是切记不要太快太频繁哈,防止有道把你的ip封了你就无法请求了。
代码和运行结果
就这样,我把项目的代码完整的供出来。
项目github地址(微信模块):https://github.com/javasmall/python
欢迎star!
#更多请关注公众号:bigsai
import itchat
import requests
import hashlib
import time
import urllib.parse
jud=False#默认是先不开启
isreturn=False#是否回复
To='en'#翻译成的语言默认是英语
def nmd5(str):#md5加密
m = hashlib.md5()
b = str.encode(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) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
bv=nmd5(headerstr)
ts=str(round(time.time()*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':'fanyi.web',
'action':'FY_BY_REALTlME'
}
return dict
url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer':'http://fanyi.youdao.com/',
'Origin': 'http://fanyi.youdao.com',
'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': 'fanyi.youdao.com',
'cookie':'_ntes_nnid=937f1c788f1e087cf91d616319dc536a,1564395185984; OUTFOX_SEARCH_USER_ID_NCOO=; OUTFOX_SEARCH_USER_ID=-10218418@11.136.67.24; JSESSIONID=; ___rl__test__cookies=1'
}
itchat.auto_login(hotReload=True)#登录
# 注册消息响应事件,消息类型为itchat.content.TEXT,文本消息
@itchat.msg_register(itchat.content.TEXT)
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.parse.urlencode(dict)
dict = str(dict)
req = requests.post(url, timeout=1, data=dict, headers=header)
val = req.json()
transtr = val['translateResult'][0][0]['tgt']
print(msg)
itchat.send(transtr, toUserName=msg['ToUserName'])
##返回监听对面说的话
if isreturn:
dict['from']='AUTO'
dict['to']='zh-CHS'##翻译成中文
dict = urllib.parse.urlencode(dict)
# dict = str(dict)
req = requests.post(url, timeout=1, data=dict, headers=header)
val = req.json()
transtr = val['translateResult'][0][0]['tgt']
print(msg)
return 'ta说:'+str(transtr)#这个加上是如果对面发消息的监听。比如你是双向翻译可以尝试下
# 绑定消息响应事件后,让itchat运行起来,监听消息
itchat.run()
鉴于笔者真没有洋娃娃所以只能模拟了
简单运行测试结果(拿队友手机自导自演)
在这里插入图片描述
结语
当然,这或许可能很有趣,又或许可能很无聊很简单,只是不同的人可能有不同的看法,不同的时间段、不同的交际都可能有不同的看法,所以请各位大佬不喜勿喷,当然,如果有改进的建议,还请指出!
python相关仓库和项目github地址:https://github.com/javasmall/python/tree/master/%E7%88%AC%E8%99%AB/Include/%E5%BE%AE%E4%BF%A1
,(微信文件目录)有兴趣的可以玩玩,star star!如果感觉还行还请各位动动小手点点收藏、点点赞
再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!的更多相关文章
- 微信小程序交流群,欢迎加入,其中微信小程序开发群、Jenkins开发群是有问必答群
微信小程序开发,请加群511389428,511389428 有问必答群:React开发,请加群523838207:523838207Jenkins开发,请加群155799363,155799363 ...
- 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录
我在 feature 分支开发得多些,但总时不时被高优先级的 BUG 打断需要临时去 develop 分一个分支出来解 BUG.git 2.6 以上开始提供了 worktree 功能,可以解决这样的问 ...
- 利用Python制作一个只属于和她的聊天器,再也不用担心隐私泄露啦!
------------恢复内容开始------------ 是否担心微信的数据流会被监视?是否担心你和ta聊天的小秘密会被保存到某个数据库里?没关系,现在我们可以用Python做一个只属于你和ta的 ...
- 再也不怕别人动电脑了!用Python实时监控
作者:美图博客 https://www.meitubk.com/zatan/386.html 前言 最近突然有个奇妙的想法,就是当我对着电脑屏幕的时候,电脑会先识别屏幕上的人脸是否是本人,如果识别是本 ...
- 在一个老外微信PM的眼中,中国移动App UI那些事儿
本文编译自Dan Grover的博客,他现在是腾讯微信的产品经理.以下是他从旧金山搬到广州后的近半年时间里,在试用过微信微博等中国主流移动App后,总结出的中美App在设计理念上的差异,并对中国移动A ...
- 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..
大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...
- 4月13号的web标准化交流化-开端
这是实习工作的开始,也是正式踏入北京之后去参加的第一个活动.也算是想着法的去融入这个圈子. 这两个分享都是基于nodejs的.nodejs从11年开始就开始红火.但是真正nodejs能用来干什么? 我 ...
- 致我们再也回不去的 Github ...
本文原文来自公众号 stormzhang,原作者自称“二流学校毕业.非科班出身.从 0 自学编程到现在的「段子张」”. 1.前言 相信大家都知道了,微软已确认要收购 GitHub 了,Github ...
- 微信开发创业交流QQ群列表
方倍工作室参与或主导的微信相关的QQ社群列表,欢迎对照加入. QQ群号 群名称 说明 推荐 518924126 微信平台开发有问必答 知识付费 ★★★★★ 188280503 微信公众平台开发最佳实 ...
随机推荐
- 2015年热门的国产开源软件TOP 50
2015年热门的国产开源软件TOP 50 开源中国在 2015 年得到了快速的发展,单开源软件收藏量就接近 40000 款,其中不乏优质的国产开源项目.本文从软件的收藏.下载.访问等多角度挑选出了 2 ...
- gensim的word2vec如何得出词向量(python)
首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置. 语料库t ...
- H3C TCP连接的拆除
- 在做微信分享到朋友圈时,手机扫码报config:invalid signature,分享后后正常的问题,是url问题
是按照以下步骤检查的 除了ACCESS_TOKEN没有缓存其他都可以 如果是invalid signature签名错误.建议按如下顺序检查: 1.确认签名算法正确,可用 http://mp.weixi ...
- Python--day70--ORM查询练习
ORM查询练习: import os import sys if __name__ == '__main__': # 加载Djang00项目的配置信息 os.environ.setdefault(&q ...
- 解决vscode电脑卡顿问题
在安装了vscode之后,发现电脑很卡,cpu使用率高达100%. 解决方法1: 打开vscode之后,点击文件==>首选项==>设置搜索设置search.followSymlinks然后 ...
- Python工程编译成跨平台可执行文件(.pyc)
原文:https://blog.csdn.net/zylove2010/article/details/79593655 在某些场景下,若不方便将python编写的源码工程直接给到其他人员,则可以将p ...
- pip安装python包时报字符编码错
比如安装scikit-learn时报错: django ascii’ codec can’t encode character 原因是用户目录或用户名存在中文,ascii不能解码,解决办法是在Pyth ...
- JOISC2014 Day2 E "交朋友" (思维+假的SCC)
传送门 题目描述 你是活跃在历史幕后的一名特工,为了世界和平而夜以继日地努力着. 这个世界有N个国家,编号为1..N; 你的目的是在这N个国家之间建立尽可能多的友好关系. 你为了制定一个特工工作的计划 ...
- P1088 上台阶
题目描述 楼梯有 \(n(1 \le n \le 50)\) 阶台阶,上楼时可以一步上 \(1\) 阶,也可以一步上 \(2\) 阶,也可以一步上 \(3\) 阶,编程计算共有多少种不同的走法. 输入 ...