采集练习(十二) python 采集之 xbmc 酷狗电台插件
前段时间买了个树莓派才知道有xbmc这么强大的影音软件(后来我逐渐在 电脑、手机和机顶盒上安装xbmc),在树莓派上安装xbmc后树莓派就成为了机顶盒,后面在hdpfans论坛发现了jackyspy 版主写的xbmc插件开发教程(赞一个!写的非常不错)。于是自己尝试去看了下觉得非常不错。刚好自己去年学过python(一直没搞过实际的东西),于是就写了酷狗电台这个插件。
我一直用酷狗听歌 电脑上这几年一直用web版酷狗 链接是 http://web.kugou.com ,当然本来开始准备到 这个链接里找到酷狗的播放链接,用浏览器查看一番后发现用的是flash,没搞定,后来在 酷狗的html5版发现了酷狗的播放列表。
插件实现的都是基本功能,连歌手、歌手图片也没提供;
音频来源于酷狗的html5版 http://m.kugou.com ,格式为m4a,连接速度还行。
以下是步骤
1、打开 http://m.kugou.com 选择电台播放 在chrome 浏览器 ->开发者工具-> console 里发现 一个 ajax请求 (下面几步都可以在console 或network 里看到相应的url请求) http://m.kugou.com/app/i/fmList.php?pageindex=2&pagesize=20 里面就是电台列表
参数pageindex 应该表示 页数、 pagesize表示每页电台数量。
打开这个链接 发现里面就是电台列表 的json 解析后如下图
分析后这个json不难发现 每个参数的意思。 fmid: 电台id 、fmname:电台名 、fmSongData :电台第一首歌的相应信息,其他参数也可以猜出。
2、选择一个电台播放后继续在 浏览器 ->开发者工具-> network 发现一个 请求 http://m.kugou.com/app/i/fmSongs.php?fmid=3&offset=0&size=20 获得电台里的所有歌曲列表
参数 fmid表示电台id 、 offset 表示查询起点、size 表示 显示数量。
里面的参数一看就知道,其中 hash应该是歌曲的id,下面要根据hash获得歌曲的真实地址。
3、 根据前一步获得的 歌曲的hash现在就可以获得 mp3的真实地址了 如 http://m.kugou.com/app/i/getSongInfo.php?hash=5D5D67FA9B7AEF5BFA948EBB2FFE168A&cmd=playInfo 参数hash就是上一步获得的hash 其中 cmd=playInfo 必须,缺少将 无法获得歌曲信息
现在基本就搞定了。
当然你如果在浏览器继续查看相应的请求、还有相应的请求获得 歌手图片、歌词信息,不过那些信息,都要获得先获得歌手名或歌名、根据第2步里的获得的数据就可以获得。
好了! 代码这里就不放了, 因为已经放到github 里去了, 地址是 https://github.com/keygle/plug.audio.kugoufm 里面是用python实现的。
采集练习(十二) python 采集之 xbmc 酷狗电台插件的更多相关文章
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- 十二. Python基础(12)--生成器
十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Python实例---爬去酷狗音乐
项目一:获取酷狗TOP 100 http://www.kugou.com/yy/rank/home/1-8888.html 排名 文件&&歌手 时长 效果: 附源码: import t ...
- (二十二)python 3 sort()与sorted()
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3 ...
- 学以致用三十二-----python中函数的括号使用
一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...
- Python核心技术与实战——十二|Python的比较与拷贝
我们在前面已经接触到了很多Python对象比较的例子,例如这样的 a = b = a == b 或者是将一个对象进行拷贝 l1 = [,,,,] l2 = l1 l3 = list(l1) 那么现在试 ...
- 三十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启
scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项 ...
随机推荐
- devicemapper: Error running deviceCreate (ActivateDevice) dm_task_run failed
在一台新机子上面,docker处理完lvs数据卷之后,启动docker服务时,出现了启动失败,失败信息如下: [root@hxin221 ~]# systemctl status docker ● d ...
- 【spring boot】12.spring boot对多种不同类型数据库,多数据源配置使用
2天时间,终于把spring boot下配置连接多种不同类型数据库,配置多数据源实现! ======================================================== ...
- ylb:日期和时间函数
ylbtech-SQL Server:SQL Server-日期和时间函数 日期和时间函数. ylb:日期和时间函数 返回顶部 1,日期和时间函数获取(当前)日期 GetDate() 2,提取部分日期 ...
- python+tesseract验证码识别的一点小心得
由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进 ...
- Django和Flask的区别以及运行流程
Django: Python Web框架里比较有名当属Django,Django功能全面,它提供一站式解决方案,集成了MVT(Model-View-Template)和ORM,以及后台管理.但是缺点也 ...
- 17、Spring Boot普通类调用bean【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...
- Solidworks拖动装配体的时候物资动力有什么用
Solidworks物资动力就是模拟真实的场景,你在拖动或旋转零件的时候会和周围的零件碰撞,有相互力的作用. 1 标准拖动 2 碰撞检查 3 选择物资动力(零件上面的黑白相间小圆表示物体重心) ...
- 微信小程序 - 考试状态不同显示
未开考 .已交卷. 考试中 .考试结束 #ddd #f00 #ff0 默认禁用色 禁用的button仅有style起作用,四个状态,通过wx:if ... elif ... e ...
- vue相关知识
1.看https://www.bilibili.com/video/av27969216/?p=54,看他的就够了 https://juejin.im/post/5a5bc8c36fb9a01ca26 ...
- .net 网站登录
如何实现,按回车键,自动登录,在相应控件上添加onkeypress事件 function CheckCodePress(e){ var e = e||window.event if (e.keyCod ...