前段时间买了个树莓派才知道有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 酷狗电台插件的更多相关文章

  1. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  2. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  3. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  4. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  5. Python实例---爬去酷狗音乐

    项目一:获取酷狗TOP 100 http://www.kugou.com/yy/rank/home/1-8888.html 排名 文件&&歌手 时长 效果: 附源码: import t ...

  6. (二十二)python 3 sort()与sorted()

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3 ...

  7. 学以致用三十二-----python中函数的括号使用

    一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...

  8. Python核心技术与实战——十二|Python的比较与拷贝

    我们在前面已经接触到了很多Python对象比较的例子,例如这样的 a = b = a == b 或者是将一个对象进行拷贝 l1 = [,,,,] l2 = l1 l3 = list(l1) 那么现在试 ...

  9. 三十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启

    scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项 ...

随机推荐

  1. 剖析ifstream打开含中文路径名文件失败的原因

    http://blog.csdn.net/yukin_xue/article/details/7543423 最近写程序的时候遇到了使用ifstream打开含中文路径文件时失败的问题,在网上翻了一下, ...

  2. 防止ddos攻击

    1.防止ddos攻击 :接入层过滤器,去判断非法请求ip地主(如果请求过多,自己加入黑名单),上传至防火墙黑名单,不再录入 2.防止xss/css攻击 :在接入层,有第三方jra包工具类,过滤所有请求

  3. An error occurred uploading to the iTunes Store - Please upgrade Java

    Yesterday there were an update to Jave (1.6.0_31) in the "Software update", but now when I ...

  4. C++输入和输出中进制问题

    默认下都是十进制 int i, j, k, l; cin>>oct>>i; //输入为八进制数 cin>>hex>>j; //输入为十六进制数 cin& ...

  5. Mysql中delimiter作用

    1. delimiter delimiter是mysql分隔符.在mysqlclient中分隔符默认是分号(:). 假设一次输入的语句较多,而且语句中间有分号,这时须要新指定一个特殊的分隔符. 2. ...

  6. ArcGIS教程:面积制表

    摘要 计算两个数据集之间交叉制表的区域并输出表. 插图 使用方法 · 区域定义为输入中具有同样值的全部区.各区无需相连. 栅格和要素数据集都可用于区域输入. · 假设区域输入和类输入均为具有同样分辨率 ...

  7. mysql数据库解决中文乱码问题

    安装mysql之后.假设存储中文.再读出的时候就会出现乱码问题. 如今的字符集有几百种之多,都是一些公司或者组织定义的. 我们应该使用可以容纳世界所有语言所有字符的字符集,这样就不会再出现乱码问题. ...

  8. mongoDb学习以及spring管理 (包括百度云配置)

    1.windows下的安装http://www.cnblogs.com/liuzhiying/p/5915741.html 2.慕课网学习单机操作mongoDb 赋权限:http://blog.csd ...

  9. apue学习笔记(第十三章 守护进程)

    本章将说明守护进程结构,以及如何编写守护进程程序. 守护进程,也就是通常说的Daemon进程,是Unix中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理 ...

  10. 关于cocos2d-x 和安卓之间的相互调用

    近期在研究cocos2d游戏移植安卓须要调用非常多方法.所以在研究之中写下它们之间相互调用 首先,cocos2d调用安卓 在一个.h文件里加入头文件 #include <jni.h> #i ...