Python 实现Nao机器人点歌和听新闻(爬取音乐和新闻)

寒假放假,被留在实验室玩机器人(其实是偷懒hah),Nao机器人可以用Python写,刚好学了点Python,来来来,搞事,于是想弄个点歌和点新闻的功能(其实是看到别人的小精灵 (*^▽^*) )。首先把思路弄清楚,这两个功能不就是两个爬虫嘛。

在线点歌,先把音乐爬下来,然后再播放。点新闻,就是爬新闻然后处理成文本,让Nao读出来。

Nao点歌

其实重要的是找到音乐的API接口,楼主想加这两个功能的时候只有两天了,只能用别人找到的API(偷懒了,没自己去分析,该打!)。QQ音乐API分析过程,大家看这个分析吧。这是用的QQ音乐的API。

代码如下:

import requests import os import re def play_music(song): URL1 ='https://api.bzqll.com/music/tencent/search?key=579621905&s='+song+'&limit=1&offset=0&type=song' header = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", } url = str(requests.get(URL1,headers=header).text) url = str(re.findall(r'\"url\":\".*?"',url)).replace("['\"url\":\"", '').replace("\"\']", '') # 处理获得真实的URL t = requests.get(url, headers=header).content file = "music.wav" # 这里最好绝对路径,Nao机器人的路径可不好弄 with open(file, "wb+") as f: f.write(t) f.close() os.system(flie) # 开始尝试用系统的播放,但是没有声音,后面会给出解决方法 if __name__ == '__main__': play_music("我好想你")

有两个需要注意的地方:

一是文件的路径,Nao机器人不怎么好看路径,不能print, 只能让它读出来。(好多都是让它读出来,所以最好预先写个让Nao说话的函数)

二是音乐文件保存为wav格式,我用的是Nao 的ALAudioPlayer模块,这个必须是.ogg or .wav。不熟悉的可以看Nao alaudioplayer 文档

下面这行就是文件的当前路径,建议file改成这个,最好不要变,后面播放歌曲还需要这个路径,

os.path.realpath(__file__)

我们现在已经成功了一半了,把歌曲下载到了Nao机器人内部了,只剩下播放了、

然而,我最后是用指令盒实现的,有点尴尬(这个文档,看的有点累。。) 在好长时间,Nao没有半点发声后,我决定修改指令盒,来实现(本来就有个播放音乐的指令盒,为何不利用呢!)。

因为现在在家,电脑没Nao的那个软件,只能码字说明了,后期有时间会加上来的。

打开Play Sound 这个指令盒,你会发现里面还有两个指令盒,一个是利用图形化界面获取文件的路径,还有一个是播放音乐,所以我们只要偷梁换柱,把路径换掉就行了,直接利用第二个指令盒。我们前面把音乐保存的file 传过去(其实不用传,你每次都用一个路径就好了,还可以覆盖前面的文件)。然后点击开始运行,通过语音控制,说明你想要听的歌,先下载歌曲,然后再播放,达到在线点歌的功能(QQ音乐有的才能点)。

Nao播放新闻

同理和上面一样,一个爬虫。这个我们需要新闻的API,我选择的是网易新闻的API(楼主又偷了别人了API,自己没分析,23333).网易新闻API,大家可去看看这个人的

新闻分为几类,我们就实现听不同的类的新闻,新闻的个数看自己。这里有坑!!!!

我先把代码放出来吧:

import requests import os import re def find_news(mes): url = "https://3g.163.com/touch/reconstruct/article/list/BA10TA81wangning/3-5.html" header = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", } All = { '娱乐' : 'BA10TA81wangning', '电视':'BD2A86BEwangning', '电影':'BD2A9LEIwangning', '明星':' BD2AB5L9wangning', '音乐':'BD2AC4LMwangning', '体育':'BA8E6OEOwangning', '财经':'BA8EE5GMwangning', '军事':'BAI67OGGwangning', '军情':'DE0CGUSJwangning', } url = "https://3g.163.com/touch/reconstruct/article/list/"+All[mes]+"/0-10.html" # print(url) text = str(requests.get(url,headers=header).text) title = re.findall(r"\"title\":\".*?\"",text) # 找到所有的内容 URL = re.findall(r"\"url\":\".*?\"",text) # 找到所有的URL for i in URL: try: i = str(i).replace("\"url\":", '').replace("\"", '') # 如果网址错误,或者没有相应 则下一个新闻 code = requests.get(i,headers=header,timeout=3000).status_code # if str(code) != "200": continue else: content = str(requests.get(i,header,timeout=3000).text) title = str(re.findall(r"<title>.*</title>",content)).replace('[\'<title>','').replace\ ('</title>\']','') # 对标题处理 content = str(re.findall(r"<meta name=\"description\" content=\".*?\"",content)).replace\ ('[\'<meta name=\"description\" content=\"','').replace('\"\']','') # 对内容处理 print(title) print(content) break except: continue if __name__ == '__main__': find_news("音乐")

你会发现,用Python3跑出来一点问题都没有,但是机器人一读,就出问题!

Nao机器人是Python2.7的版本,而我用的是Python3的版本。然后弄下来的新闻乱码,乱成这样。

\xe6\x9d\xa8\xe8\xb6\x85\xe8\xb6\x8a\xe5\x81\xb6\xe9\x81\x87\xe8\x87\xaa\xe5\xb7\xb1\xe7\x9a\x84\xe4\xba\xba\xe5\xbd\xa2\xe7\xab\x8b\xe7\x89\x8c \xe6\xbf\x80\xe5\x8a\xa8\xe5\x90\x88\xe5\xbd\xb1\xe8\xa1\xa8\xe6\x83\x85\xe8\xb6\x85\xe8\x90\x8c_\xe6\x89\x8b\xe6\x9c\xba\xe7\xbd\x91\xe6\x98\x93\xe7\xbd\x91

开始我以为是编码的问题,改了几种编码,然后准备放弃(其实中途我看到过解决办法,但是感觉不是我这种情况,就退出了,气死),原因就是Python2.7的列表转字符串有问题,Python3可以正常使用!我用了正则表达式,把信息变成了列表,然后再转字符串就出问题。(大家可以试下一步一步的让机器人读出来你需要的信息,大家最后可以把标题和内容连接在一起让Nao读出来)

只需要修改一点点,原本是把列表变成字符串,现在我们用第0个,例如:str(title[0]),正则表达式也稍微修改下就好了,因为源代码没带回来,所以修改后的不能发,下回补上。

在线点歌貌似还需要完善,因为我是先缓存下来,然后播放,如果可以边接收数据边播放就更好了(悄咪咪的说句,音乐播放完了,我好像不记得删除了,占了内存(*^▽^*) ),总的来说我是利用了爬虫。

播放新闻,其实也需要改善,对众多新闻的处理,要是能实现对某个人或者某件事特定新闻的播放就好了,还需要完善。

另外我们Nao机器人舞蹈也太low了,被别人嘲笑的(我们也是用了一点心呢,好歹有几个节拍对上了),加油!!!

最后我不会忘记要学算法的, 加油ヾ(◍°∇°◍)ノ゙!!!

原文链接:https://blog.csdn.net/qq_40590018/article/details/86670055?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277607816781818782534%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277607816781818782534&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-9-86670055-null-null.nonecase&utm_term=%E6%96%B0%E9%97%BB

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
文明发言,共建和谐米科社区
提交
头像

昵称

取消
昵称表情图片