美文网首页Python新世界python热爱者
如何用Python实现一个你问我答的翻译机器人?

如何用Python实现一个你问我答的翻译机器人?

作者: 48e0a32026ae | 来源:发表于2018-11-11 16:06 被阅读52次

翻译机器人其实很简单,使用API对接百度翻译,使用qqbot构建一个qq聊天机器人。当然,微信也可以,参考wxpy。

1.API

学习Python中有不明白推荐加入交流群

                号:516107834

                群里有志同道合的小伙伴,互帮互助,

                群里有不错的学习教程!

曾经有人在某论坛里面提出一个问题:”python特别适合网络编程,VB擅长GUI(图形用户界面)设计,可否有一种方法让两种语言结合起来?”。得到的回答五花八门,特别是”共享文件夹”这样的方法,确实有效,但是仔细一想确实不是很理想。

这正是应用程序编程接口(Application Programming Interface,API)的用处,它为不同的应用提供了友好方便的接口。不同开发者不同的架构,甚至不同的编程语言也没问题。这就实现了不同软件进行信息共享。

尽管不同的软件应用都有不同的API,但API却经常被理解成”网络应用API”,一般情况下,程序员通过HTTP协议向API发起某种请求,API会用XML(可扩展标记语言,Extensible Markup Language)或者JSON((JavaScriptObject Notation,JS 对象简谱)格式返回响应的信息。但JSON目前是数据传输的主流选择。

下面我用百度翻译开放平台的API为例介绍API如何使用。

百度一下就可以看到它的官网了,进入官网,登录百度账号。

百度翻译开放平台提供4种服务,通用翻译API/定制化翻译API/拍照翻译SDK/语音翻译SDK,选择通用翻译API>立即使用>填写一下相关信息,就可以使用平台提供的通用翻译了!

当你完成上述步骤后,平台会给你appid和密钥,假设,为了后来的编程方便。我们设你在平台得到的如下:

Appid=2018110856362537

secretKey =BVEY239HCDSUH

我随便输入的,切勿当真,仅仅是演示。

按照教程,通用翻译API有HTTPS和HTTP地址,我们就用HTTPS地址:

https://fanyi-api.baidu.com/api/trans/vip/translate

使用POST或者GET方法传递以下字段,我使用的是GET方法。

其中q是url编码过的字符,python可提供url编码

from urllib.parse import quote

w='蜀中无大将,廖化作先锋'

q=quote(w)

print(q)

得到这样的字符串:

%E8%9C%80%E4%B8%AD%E6%97%A0%E5%A4%A7%E5%B0%86%EF%BC%8C%E5%BB%96%E5%8C%96%E4%BD%9C%E5%85%88%E9%94%8B

From是翻译源语言,这里是中文,值为zh,目标语言to,翻译成英语,值为en

其他语言列表部分如下:

Salt是随机数,要求整型,可以使用random库的randint函数。Sign是签名,使用md5算法生成的32位签名,如下。

from random import randint

from hashlib import md5

salt = randint(32768, 65536)

myu = appid + w + str(salt) + secretKey

m1 = md5()

m1.update(myu.encode('utf-8'))

sign = m1.hexdigest()

假定salt=43716,Appid=2018110856362537,SecrectKey=BVEY239HCDSUH,w='蜀中无大将,廖化作先锋',那么结果是:

myu=’2018110856362537蜀中无大将,廖化作先锋43716BVEY239HCDSUH’

sign='88803b93d8f72a1a0e3daecb202f59f9'

最后组装链接,使用get,那么完整的链接如下:

url = 'https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+ str(salt) + '&q=' + urlq + '&sign=' + sign

最后要做的就是使用python的网络请求啦,和爬虫一样的方法。我直接放完整代码吧,如下:

from hashlib import md5

from random import randint

import json

appid = '201811085636253'

secretKey = 'BVEY239HCDSUH '

w='蜀中无大将,廖化作先锋'

q=quote(w)

salt = randint(32768, 65536)

myu = appid + w + str(salt) + secretKey

m1 = md5()

m1.update(myu.encode('utf-8'))

sign = m1.hexdigest()

url = 'https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+ str(

salt) + '&q=' + q + '&sign=' + sign

a = urlopen(url)

b = a.read()

bb = b.decode('UTF-8')

pyobj=json.loads(bb)

if "error_code" in pyobj:

print( "error_code:"+pyobj["error_code"]+'error_msg:'+pyobj['error_msg'])

else:

dst = pyobj['trans_result'][0]['dst']

print(dst)

请改动appid和secretKey后再演示,得到

Thereare no generals in Shu and Liao as pioneers.

值得注意的是,百度翻译开放平台规定:

每月翻译字符数低于200万,享免费服务;

现价¥49.00/百万字符,原价¥70.00/百万字符

2.qqbot

qqbot 是一个用 python 实现的、基于腾讯SmartQQ (网页qq)协议的 QQ 机器人框架,可运行在 Linux 、 Windows 和 Mac OSX 平台下。使用pip install qqbot安装

本项目 github 地址: https://github.com/pandolia/qqbot

其实qqoot挺简单的,如下:

from qqbot import QQBotSlot as qqbotslot,RunBot

@qqbotslot

def onQQMessage(bot, contact, member, content):

nr = str(content)

fy='你在说:'+nr

bot.SendTo(contact, fy)

if __name__ == '__main__':

RunBot()

这段代码运行,出现一个二维码,务必使用QQ小号扫描二维码,当你给机器人发消息的时候它的回复就是 你在说:+你发的消息,值得注意的是,机器人加QQ群出现的新消息机器人也会回复!

注意,上面注册的响应函数的函数名必须为“onQQMessage”,函数参数也必须和上面的一致!

3.结合

我们把翻译的程序改写封装成一个函数,再加入QQ机器人模块,如下

from urllib.parse import quote

from urllib.request import urlopen

from hashlib import md5

from random import randint

import json

from qqbot import QQBotSlot as qqbotslot,RunBot

import re

def ch2en(ch):

"使用百度翻译API把中文翻译成英文"

cha=re.sub('s','',ch)

if len(cha)==0:

return '请认真对待翻译,别发图片,空白等等'

appid='你的appid'

secretKey = '你的密钥'

urlq=quote(ch,encoding='UTF-8')

salt = randint(32768, 65536)

myu=appid+ch+str(salt)+secretKey

m1=md5()

m1.update(myu.encode('utf-8'))

sign=m1.hexdigest()

url='https://fanyi-api.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20181023000223357&salt='+str(salt)+'&q='+urlq+'&sign='+sign

a=urlopen(url)

b=a.read()

bb=b.decode('UTF-8')

pyobj = json.loads(bb)

if "error_code" in pyobj:

return "error_code:"+pyobj["error_code"]+'error_msg:'+pyobj['error_msg']

else:

dst = pyobj['trans_result'][0]['dst']

return dst

@qqbotslot

def onQQMessage(bot, contact, member, content):

nr = str(content)

fy=ch2en(nr)

bot.SendTo(contact, fy)

if __name__ == '__main__':

RunBot()

再次提醒,运行前修改appid和密钥。

突然发现我做的这样的机器人比单纯的在网页上翻译好多了,一不小心又让你装了一个漂亮的逼,哈哈哈

而且这个也是一个学英语的好工具,我经常使用它翻译长难句。

相关文章

  • 如何用Python实现一个你问我答的翻译机器人?

    翻译机器人其实很简单,使用API对接百度翻译,使用qqbot构建一个qq聊天机器人。当然,微信也可以,参考wxpy...

  • 如何用python实现Markowitz投资组合优化

    Python--【研究】如何用python实现Markowitz投资组合优化 Python实现马科维茨有效边界 但...

  • Something For Practice

    Python Python 练习册,每天一个小程序 Github标星57k+,如何用Python实现所有算法! -...

  • 你问我答

    你问过我很多问题 简单的 复杂的 你问的时候 我总爱推迟回答 十四岁的你问了我一个问题 等到你十五岁的时候我才告诉...

  • 你问我答

    今天,有点小忙。要出一个简报,要把政工部的安排部门党员看电影的事情完成。工作忙完,静下心来,细细思考老师提问的问题...

  • 你问我答

    你问我答是个人人都可参与的游戏和调查。 先由女人问男人,再由男人问女人。 【女人问男人规则】 1、提问者是女人,1...

  • 你问我答

    1关键词:关系 孟老师,你好,我想从事银行类工作,但是又听说银行类很注重关系,对工资待遇也没有渠道可以得知,很犹豫...

  • 你问我答

    青春总是伴随着各种各样的问题,最近有很多同学问我问题,今天我就答一答喽! 语文是国语固然重要,可为什么好多重点高中...

  • 你问我答

    1.在本次课程中,你感觉写作状态最好的是哪节课? 写作状态最好的是内心平静的每一天。只有内心宁静,才能穿透外在的种...

  • 你问我答

    不再主动,你要问,那我就回答。 如果你不找,那我也不联系,如果你想要分开,我就潇洒的离开。 不再去挽留,是我最后的...

网友评论

  • Nuko:小机器人的qq号是多少呀…

本文标题:如何用Python实现一个你问我答的翻译机器人?

本文链接:https://www.haomeiwen.com/subject/tonxfqtx.html