热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python外国人也用吗_再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!...

前言在前面的一篇文章如何用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地址(微信模块):github.com/javasmall/p…

欢迎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!如果感觉还行还请各位动动小手点点收藏、点点赞👍!

欢迎关注公众号:bigsai 长期奋战输出!



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
author-avatar
schell
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有