もはや外国人と交流を恐れて!私は、マイクロチャネルのチャット翻訳アシスタントを実装するためのpythonを使用します!

あなたが遭遇したとき  、いくつかの外国の弟妹非常に興奮し、社交的にしたい、だけでなく、英語能力や他のランプアップ段階のレベル、このガジェットはあなたが嵐を乗り切ることができます! どのようにコードを教えるために優雅に浮気します  。この記事では、私は詳細に、翻訳の具体的な実現を説明します!主な機能について:チャットモニターいくつかの重要なパスワード微信を経由して変換モードで自分の発言を開き、反対の変換モードを言います!

前のコールの翻訳では、私たちのことができます。デザインのアイデア  翻译接口 や  微信的api 何か面白い、主のためのマイクロチャンネルAPIの使用やって組み合わせて  、独自の監視送信メッセージ  、その後、いくつか  关键字判断 など、スイッチなどを変更し、言語を翻訳(あなたは自分のロジックを設定することができます) 、その後に行く  適切な方法の翻訳を依頼

自動的に送信することによって、お互いに単語を翻訳。そして、あなたは(手動面白い)を動作させる方法で無知------孟新しい外観として自分自身を考えるふりをします

あなたは韓国人の友人を持っている場合はもちろん、自動的に発行された中国語に翻訳彼の言葉は、何を言うと、自動的に韓国語に翻訳され、その後、彼に配布します。行くことができます弟の小さな姉妹のリソースを持っている能力持っている  女の子の人形を試しを  !

詳細設計

思考の電車の前がクリアされているので、それは問題のすべての種類を克服する方法を、ステップバイステップ。主な二つの領域、  一个 別々の  マイクロチャネルAPI  と別の  他のいくつかのルールを翻訳するための要求の適切な方法は  、  另一 については、2一緒に統合する人々にフレンドリーな操作をすることができます!

もちろん、これらの二つを解決した後、あなたは彼の論理スイッチのいくつかを達成することができますが、私は少しの私のロジックの簡単な実装を使用します!

環境:  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=; [email protected]; 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() 复制代码

鉴于笔者真没有洋娃娃所以只能模拟了 简单运行测试结果(拿队友手机自导自演)

结语

当然,这或许可能很有趣,又或许可能很无聊很简单,只是不同的人可能有不同的看法,不同的时间段、不同的交际都可能有不同的看法,所以请各位大佬不喜勿喷,当然,如果有改进的建议,还请指出!

おすすめ

転載: www.cnblogs.com/7758520lzy/p/12152712.html