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

编程入门 行业动态 更新时间:2024-10-22 08:36:13

Python 实现Nao机器人点歌和听<a href=https://www.elefans.com/category/jswz/34/1767295.html style=新闻(爬取音乐和新闻)"/>

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 ='=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("\"\']", '')    # 处理获得真实的URLt = requests.get(url, headers=header).contentfile = "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 = ".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 = "/"+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)  # 找到所有的URLfor i in URL:try:i = str(i).replace("\"url\":", '').replace("\"", '')           # 如果网址错误,或者没有相应 则下一个新闻code = requests.get(i,headers=header,timeout=3000).status_code #if str(code) != "200":continueelse: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)breakexcept:continueif __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了,被别人嘲笑的(我们也是用了一点心呢,好歹有几个节拍对上了),加油!!!

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

更多推荐

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

本文发布于:2024-02-24 19:01:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1696351.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新闻   机器人   音乐   Python   Nao

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!