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

您所在的位置:网站首页 主播用什么播放器点歌 Python 实现Nao机器人点歌和听新闻(爬取音乐和新闻)

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

2024-07-14 13:36| 来源: 网络整理| 查看: 265

  寒假放假,被留在实验室玩机器人(其实是偷懒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".*",content)).replace('[\'','').replace\ ('\']','') # 对标题处理 content = str(re.findall(r"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3