摘要

我做了个能模仿女神说话声音的闲聊QQ机器人。

(她语音回答的是:没呢,我为什么要吃?)

详细

QQ机器人框架

我当前能找到的,且可以使用的框架只有小栗子机器人。
小栗子机器人官方并不提供Python SDK,但感谢xzfg大佬开发了HTTP API。
这里有一个坑,HTTP API的"/sendgroupaudio"仅能上传语音文件,若要发送语音,则需要将POST请求"/sendgroupaudio"时返回的数据通过quote函数转化后以文本消息的形式再次发送。

闲聊机器人

我最终用的是腾讯智能闲聊机器人,这机器人说话很可爱,但总是抽风(我调用了157次,失败了54次,失败率34.39%)。
图灵机器人几乎不存在调用失败,API也很简单,美中不足的是单日可调用次数太少了。
腾讯那个API调用起来太麻烦了,我懒得研究,于是就从网上Copy了"api.py"。

语音合成

阿里云智能语音交互里有一个“个性化人声定制试”,可以申请3个月的免费试用。
申请完了就可以臭不要脸地找女神录音了,这需要让她读20个句子。

代码

cuicui.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
### cuicui.py ###
from urllib.parse import quote
import time
import requests
import json
import api#全局变量列表
#sessid#初始化
def initialize():url = "http://127.0.0.1:10429/allocsession"data = ""res = requests.post(url=url,data=data)#res.text内容为:'{"session_id":1}'sessid = eval(res.text)['session_id']return str(sessid)#获取并清空事件缓冲区
def get_msg(sessid):url = "http://127.0.0.1:10429/getevent"data = 'sessid=' + sessidres = requests.post(url=url,data=data)msg = res.textmsg = msg[msg.rfind('{"Type":"GroupMsg","FromQQ":{"UIN":'):]if msg == '':return 'none'else:return eval(msg.encode("utf-8"))#发送文本消息
def send_msg(msg,togroup):url = "http://127.0.0.1:10429/sendgroupmsg"data = "fromqq=2101901639&togroup=" + str(togroup) + "&text=" + msgrequests.post(url=url,data=data.encode('utf-8'))#语音合成并发送
def voice(msg,togroup):v = "https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=kKvOUTZkIo1*****&token=2e96048c22c54ca6b223c49ffdd*****&text=" + quote(msg) + "&format=mp3&volume=100&voice=pt_kKvOUTZkIo1*****_**"print(v)res = requests.get(v)f = open(r"C:\Users\YCyaen\Desktop\Xiaolizi\voice.mp3","wb")f.write(res.content)f.close()#上传语音url = "http://127.0.0.1:10429/sendgroupaudio"data = "fromqq=2101901639&togroup=" + str(togroup) + r"&type=0&fromtype=1&path=C:\Users\YCyaen\Desktop\Xiaolizi\voice.mp3"res = requests.post(url=url,data=data.encode('utf-8'))#发送语音url = "http://127.0.0.1:10429/sendgroupmsg"data = "fromqq=2101901639&togroup=" + str(togroup) + "&text=" + quote(eval(res.text)["ret"].replace('\/','/'))requests.post(url=url,data=data.encode('utf-8'))#sessid = initialize()
#测试时使用sessid = '1'
sessid = '1'#主循环
while True:try:#防止机器人运行时出现各种突发情况msg = get_msg(sessid)#轮查none = msg == 'none'if bool(1-none):#如果消息不是noneself = msg['FromQQ']['UIN'] == 210190****if bool(1-self):#如果消息不来自机器人自己if msg['Type'] == 'GroupMsg' and msg['FromGroup']['GIN'] == 947886198:#群聊消息且来自对应群聊msg = msg['Msg']['Text']if msg[0:1] == 't':#当消息开头为字母"t"时,机器人发送文本消息msg_0 = api.get_text(msg[1:])#提交闲聊机器人print(msg[1:],":",msg_0)send_msg(msg_0,94788****)else:msg_0 = api.get_text(msg)print(msg,':',msg_0)voice(msg_0,94788****)time.sleep(5)except:print("啊欧,出错了...")

api.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
### api.py ###
import hashlib
import time
import random
import string
from urllib.parse import quote
import requestsdef curlmd5(src):m = hashlib.md5(src.encode('UTF-8'))# 将得到的MD5值所有字符转换成大写return m.hexdigest().upper()def get_params(plus_item):# 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)t = time.time()time_stamp = str(int(t))# 请求随机字符串,用于保证签名不可预测  nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))# 应用标志,这里修改成自己的id和keyapp_id = '21654*****'app_key = 'UFpwNWwcs3X*****'params = {  'app_id' : app_id,'question' : plus_item,'time_stamp':time_stamp,'nonce_str':nonce_str,'session':'10000'}sign_before = ''# 要对key排序再拼接  for key in sorted(params):# 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。  sign_before += '{}={}&'.format(key, quote(params[key], safe=''))# 将应用密钥以app_key为键名,拼接到字符串sign_before末尾sign_before += 'app_key={}'.format(app_key)# 对字符串sign_before进行MD5运算,得到接口请求签名  sign = curlmd5(sign_before)params['sign'] = signreturn paramsdef get_text(plus_item):# 聊天的API地址    url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat"# 获取请求参数  plus_item = plus_item.encode('utf-8')payload = get_params(plus_item)# r = requests.get(url,params=payload)r = requests.post(url,data=payload)return r.json()["data"]["answer"]

结尾

我喜欢夏天的冰激凌,冬天的糖炒栗子,酸奶的盖,刚出锅的薯条,虾饺里的虾仁,满嘴的跳跳糖,但都比不上喜欢你。
(机器人说的)(狗头)

仿生女朋友会梦见电子男朋友吗?——能模仿女神说话声音的闲聊QQ机器人相关推荐

  1. 男女朋友之间有矛盾,女朋友一点也不愿意哄男朋友

    在男女朋友之间如果出现矛盾,首先最重要的是双方都要愿意进行沟通.如果女朋友不愿意哄男朋友,可能是因为她对当前的情况不满或者有不满的地方.在这种情况下,男朋友应该尝试着了解女朋友的想法和感受,而不是强制 ...

  2. 【杂谈】仿生人会梦见电子羊吗?

  3. 机器人也会梦见电子羊吗

    I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I've w ...

  4. 某程序员女友抱怨:男朋友工作975,天天回家说好累,不肯亲热,倒头就睡,难怪程序员没女朋友!...

    程序员下班回家后对女朋友的正确态度是什么? 一个程序员的女朋友发帖抱怨:男朋友工作也就975,但每天回来都说好累,不亲亲抱抱,只想好好安静一下,十一点倒头就睡.难道程序员都这样吗?跟女朋友都处成了室友 ...

  5. 七夕送什么礼物给女朋友,七夕送礼女朋友超喜欢的礼物推荐

    今年的七夕就在八月四号啦~很快就要到了,除了在欢度暑期之外,七夕情人节就要来了.看着七夕越来越近,又到了情侣之间相互送礼的时刻了,然而 " 送什么礼物 " 估计又成为了一个很大的问 ...

  6. 程序员到底该怎么给女朋友挑礼物

    " 阅读本文大概需要 12 分钟. " 大家好,我是编辑部小马. 马上就要双十一了,我知道,你们着急,我也着急. 你们可能挺着急的,马上双十一了,买点什么送给我心爱的小芳呢. 我也 ...

  7. 柔性电子综述2012 ---在医疗,汽车行业,人机界面,移动设备以及其他场景下的可能应用

    Flexible Electronics: The Next Ubiquitous Platform 杂志: PROCEEDINGS OF THE IEEE author: Arokia Nathan ...

  8. 女朋友生气了该怎么办·《每天懂一点爱情心理学》·一

    今天把这本书看完了,于是就慌忙的想在豆瓣阅读上更新一下,谁知道竟然没搜索到这本书,后来才发现,这是一个丛书书系,咱们中国丛书书系的书号可以一个书号下面有好几本书.于是把自己的阅读添加到豆列里面,以便后 ...

  9. 男朋友工资5K,又爱打游戏,该分手吗?

    游戏是一种休闲娱乐的方式,学生时代父母反对玩游戏,只能偷偷摸摸地玩.工作后,没了父母的约束终于可以光明正大地玩游戏,可是又要腾出时间来陪女朋友.如果过度沉迷游戏,结局就是注孤生!对于男朋友打游戏这件事 ...

最新文章

  1. 如何在 GPU 上优化卷积
  2. sql like N'%%',N 是代表什么意思 及Like语句详解
  3. Java笔记-通过4个小程序对Java内存初步探究
  4. Fortran代码在终端输出彩色文字
  5. 单片机c语言必背100代码,单片机C语言代码手册 含100多个经典C程序.pdf
  6. App Inventer制作蓝牙通讯软件
  7. 营销数字化转型行业实践
  8. 微信小程序转发功能详解
  9. 100003字,带你解密 双11、618电商大促场景下的系统架构体系
  10. 嵌入式 linux 之 Lzma 移植
  11. 【Oracle】 选择题汇总
  12. matlab背景色为白色
  13. 浏览器实时查看日志log.io
  14. 神经网络入门书籍推荐,神经网络基础书籍
  15. Visio 学习笔记 —— 编辑链接点
  16. 组播Lab RPF TTL
  17. linux系统可以用pr吗,linux – 关于pr命令的一些问题
  18. 电大计算机专业英语形成性考试,《计算机专业英语》形成性考核册答案
  19. java求最大子串_Java获取两个字符串中最大相同子串的方法
  20. android 电视台列表,Android电视:获取频道列表

热门文章

  1. Qt Charts 图表组件(折线图)
  2. 在vue中使用和风天气插件
  3. kali防火墙命令集合
  4. 爬虫程序简单部署到云服务器
  5. NBA历史上那个位置的球员能够拿下最多的MVP呢?
  6. ziheng -计算器
  7. 端盖冲压成形工艺及模具设计 || 技巧
  8. http服务器发送消息,node.js+electron教程(二): http服务器, ws服务器, 进程管理
  9. Super的基本用法
  10. Web3究竟红在哪里,它的出现能为人类社会带来什么?