Python有很多有意思的库,利用这些库可以生成一个有意思的应用。
这里展示一个用三个库来快速生成一个能够自动讲笑话的机器人。这个机器人能够自动生成一个笑话,并且用语音读出来。
程序员无废话,直接进入主题。该机器人分三步:
第一步:安装pyjokes,并且调用随机生成一个笑话。
pip install pyjokes
调用例子
pyjokes.get_joke()
第二步:申请百度翻译的开发者,可以免费使用。这里使用百度,也可以根据需要使用别的翻译引擎。
用如下代码,将百度翻译说明文档进行封装,方便后续使用。将代码中的‘INPUT——YOUR—APPID','INPUT——YOUR--APPkey’替换成你自己申请的。
将下面的代码保存到文件trans.py中。
# Please refer to `https://api.fanyi.baidu.com/doc/21` for complete api document
import requests
import random
import json
from hashlib import md5
class Translate_Baidu():
def __init__(self):
# Set your own appid/appkey.这里的appid和appkey可以在百度中申请开发者来获得。
self.appid = 'INPUT——YOUR--APPID'
self.appkey = 'INPUT——YOUR--APPkey'
# For list of language codes, please refer `https://api.fanyi.baidu.com/doc/21`
self.from_lang = 'en'
self.to_lang = 'zh'
self.endpoint = 'http://api.fanyi.baidu.com'
self.path = '/api/trans/vip/translate'
self.url = self.endpoint + self.path
# Generate salt and sign
def make_md5(self, s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
def translate(self, query):
salt = random.randint(32768, 65536)
sign = self.make_md5(self.appid + query + str(salt) + self.appkey)
# Build request
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': self.appid, 'q': query, 'from': self.from_lang, 'to': self.to_lang, 'salt': salt, 'sign': sign}
# Send request
r = requests.post(self.url, params=payload, headers=headers)
result = r.json()
# Show response
return json.dumps(result, indent=4, ensure_ascii=False)
第三步:安装pyttsx3, 并且调用
pip install pyttsx3
调用例子
pp = pyttsx3.init()
pp.say("hello")
pp.runAndWait()
将以上的整合起来编码成下面代码:
将代码保存到jokes.py中
from trans import Translate_Baidu as baidutrs
import pyjokes as pyjokes
import json
import pyttsx3
# 利用pyttsx3进行文字转语音
trs = baidutrs()
result = json.loads(trs.translate(query=pyjokes.get_joke()))
print(result['trans_result'][0]['src'])
print(result['trans_result'][0]['dst'])
# 利用pyttsx3进行文字转语音
pp = pyttsx3.init()
pp.say(result['trans_result'][0]['dst'])
pp.runAndWait()
运行:
% python3 jokes.py
Why did Microsoft name their search engine BING? Because It's Not Google.
为什么微软将其搜索引擎命名为BING?因为这不是谷歌。
后记:
这个机器人有点不足的地方,一个是笑话都太程序猿化,一般人get不到笑点,可以开发自己感兴趣的笑话库。这里只做学习展示用。