分类: oc2014-01-29 15:34 2676人阅读 评论(2) 收藏 举报
基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证,而且返回信息里面只有URL,没有一些相关的属性信息。所以就想方设法弄到了QQ音乐的API

已经用xCode尝试过并且可行的API:
★搜索音乐(歌词)
http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value=歌曲名&artist=歌手名&type=qry_song&out=json&page_no=页码&page_record_num=单页记录数量
这个网上搜索不到的,自己用fiddler抓出来的,会返回一个json,注意的是返回的json的key没有用引号引起来而且需要对URL本身和返回的内容使用gb2312编(解)码
看这样一个例子:

 

复制代码

  1. NSString *title=@"记得";
  2. NSString *artist=@"林俊杰";
  3. //-使用歌名和歌手执行搜索
  4. NSString *searchURLString=[NSString stringWithFormat:@"http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value=%@&artist=%@&type=qry_song&out=json&page_no=%i&page_record_num=%i",title,artist,1,3];
  5. searchURLString=[searchURLString stringByAddingPercentEscapesUsingEncoding:NSGB2312StringEndoding];
  6. NSString *searchResult=[NSString stringWithContentsOfURL:[NSURL URLWithString:searchURLString] encoding:NSGB2312StringEndoding error:nil];
  7. NSLog(@"%@",searchResult);

就会得到这样的不标准json,之后的步骤简单的就说下,截取searchCallBack()中间的内容,对key进行加引号,然后就可以用json解码框架来解码

 

复制代码

  1. searchCallBack({result:"0",msg:"",totalnum:"138",curnum:"3",search:"记得",songlist:[{idx:"1",song_id:"1679711",song_name:"记得",album_name:"上海老歌 CD07",singer_name:"欧阳飞莺(Chu Shia)",location:"8",singer_id:"16343",album_id:"133528",price:"250"},{idx:"2",song_id:"1516144",song_name:"记得",album_name:"小精选",singer_name:"刘浩龙",location:"3",singer_id:"4797",album_id:"122193",price:"250"},{idx:"3",song_id:"1512932",song_name:"记得(《爱情睡醒了》插曲)",album_name:"爱情睡醒了",singer_name:"林俊杰",location:"8",singer_id:"4286",album_id:"121988",price:"320"}]})

★下载歌词
搜索完成后,每首歌曲会对应一个price属性,如果这个属性对应的值是250就说明没有歌词,确认有歌词,就可以用下面的接口下载歌词
http://music.qq.com/miniportal/static/lyric/歌曲id求余100/歌曲id.xml
如果正常会返回这样的xml(json的返回地址没抓到)

看这个例子:
前一个例子中返回的第三首歌有的price属性值为320,表示有歌词,如果下载这首歌的歌词,就用这个url:
http://music.qq.com/miniportal/static/lyric/32/1512932.xml
腾讯就会送回这样的xml

 

复制代码

  1. <lyric>
  2. <![CDATA[
  3. [ti:记得]
  4. [ar:林俊杰]
  5. [al:288966]
  6. [offset:0]
  7. [00:17.55]谁还记得
  8. [00:19.33]是谁先说永远的爱我
  9. [00:26.03]以前的一句话
  10. [00:29.02]是我们以后的伤口
  11. [00:33.75]过了太久
  12. [00:35.47]没人记得当初那些温柔
  13. [00:42.40]我和你手牵手
  14. [00:45.36]说要一起走到最后
  15. [01:06.37]我们都忘了
  16. [01:11.05]这条路走了多久
  17. [01:15.11]心中是清楚的
  18. [01:17.49]有一天有一天都会停的
  19. [01:23.04]让时间说真话
  20. [01:26.94]虽然我也害怕
  21. [01:31.00]在天黑了以后
  22. [01:33.29]我们都不知道会不会有以后
  23. [01:41.82]谁还记得
  24. [01:43.61]是谁先说永远的爱我
  25. [01:50.24]以前的一句话
  26. [01:53.24]是我们以后的伤口
  27. [01:57.77]过了太久
  28. [01:59.44]没人记得当初那些温柔
  29. [02:06.20]我和你手牵手
  30. [02:09.07]说要一起走到最后
  31. [02:30.40]我们都累了
  32. [02:34.44]却没办法往回走
  33. [02:38.34]两颗心都迷惑
  34. [02:40.69]怎么说怎么说都没有救
  35. [02:46.22]亲爱的为什么
  36. [02:50.21]也许你也不懂
  37. [02:54.11]两个相爱的人
  38. [02:56.65]等着对方先说找分开的理由
  39. [03:05.15]谁还记得爱情开始变化的时候
  40. [03:13.52]我和你的眼中
  41. [03:16.49]看见了不同的天空
  42. [03:21.09]走的太远
  43. [03:22.77]终于走到分岔路的路口
  44. [03:29.40]是不是你和我
  45. [03:32.40]要有两个相反的梦
  46. [03:40.84]谁还记得
  47. [03:42.60]是谁先说永远的爱我
  48. [03:49.38]以前的一句话
  49. [03:52.22]是我们以后的伤口
  50. [03:56.82]过了太久
  51. [03:58.44]没人记得当初那些温柔
  52. [04:05.48]我和你手牵手
  53. [04:08.15]说要一起走到最后
  54. [04:21.42]我和你手牵手
  55. [04:24.36]说要一起走到以后
  56. ]]>
  57. </lyric>

如果你用price为250的歌曲对应的id来搜索,比如第一个例子中的第一首歌,那么你使用的这个url:
http://music.qq.com/miniportal/static/lyric/11/16797.xml

那么就会送回404错误信息:

 

复制代码

  1. The requested URL '/miniportal/static/lyric/11/1679711.xml' was not found on this server.

★获取专辑插图
如果需要获取专辑插图,就可以使用下面的接口
http://imgcache.qq.com/music/photo/album/专辑id求余100/albumpic_专辑id_0.jpg
看这个例子:
要获取第一个例子的中的第三个结果的专辑插图,就这么用:
http://imgcache.qq.com/music/photo/album/88/albumpic_121988_0 .jpg
就会返回500*500的插图(QQ音乐的插图清晰度很高)

★获取排行榜(尚未经过xCode测试)
目前抓到两个排行榜的地址:
新歌榜:http://music.qq.com/musicbox/shop/v3/data/hit/hit_newsong.js
总榜:http://music.qq.com/musicbox/shop/v3/data/hit/hit_all.js

因为还没有进行进一步的尝试就不放例子了

★获取音乐地址
http://stream1歌曲信息中的location值.qqmusic.qq.com/3歌曲ID(7位数,不足在前面补0). mp3
例如之前搜索出来的第一首歌的地址应该是:
http://stream18.qqmusic.qq.com/31679711. mp3
第二首歌的地址应该是
http://stream13.qqmusic.qq.com/31516144. mp3

这个仍然在测试中

希望对和我一样正在努力做在线音乐的童鞋有些帮助

[ 此帖被hxy060799在2012-09-09 11:20重新编辑 ]
 

QQ音乐的各种相关API的更多相关文章

  1. QQ音乐无损歌曲接口api

    1.打开QQ音乐官网 y.qq.com 2.选择你要的歌曲,进入后查看网址,以虎口脱险这个歌曲为例:http://y.qq.com/#type=song&mid=000Ib8E71sUNi7 ...

  2. QQ音乐API

    今天分享的是QQ音乐API 搜索歌曲API:http://s.music.qq.com/fcgi-bin/music_search_new_platform?t=0& amp;n={2}&am ...

  3. 【QQ音乐Api】移花接木 打造自己的音乐电台

    最近突发奇想想做个在线音乐小网页.需求很简单,如下 搜索歌曲 或 歌手 在线播放音乐 借用qq 或者 百度的 音乐接口 需求明确那就直接动手了 我首先尝试的百度音乐,但是不能在线播放(提示forbid ...

  4. QQ音乐API分析记录

    我一直是QQ音乐的用户,最近想做一个应用,想用QQ音乐的API,搜索了很久无果,于是就自己分析QQ音乐的API. 前不久发现QQ音乐出了网页版的,是Flash的,但是,我用iPhone打开这个链接的时 ...

  5. 音乐API之QQ音乐

    欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!正文开始,今天我们要讲的是QQ音乐的API,都是来源于官方的地址,以前我也想写一个,但百度谷歌之后都 ...

  6. 调皮的QQ音乐API:修复无法获取歌单

    上一篇完整版:http://www.cnblogs.com/TwilightLemon/p/7076938.html QQ音乐的API真是太调皮了,获取歌单的API又更换了好多次,喵喵喵 旧版API( ...

  7. 某音乐类App评论相关API的分析及SQL注入尝试

    关键字:APIfen.工具使用.sql注入 涉及工具/包:Fiddler.Burpsuite.Js2Py.Closure Compiler.selenium.phantomjs.sqlmap 摘要: ...

  8. 网易云和QQ音乐api

    最近有点闲,听歌的时候遇见好听的想下载却遇到尴尬的事,版权!唉,知道我干什么了吧 网易云音乐 获取排行榜中的歌曲列表 https://music.163.com/discover/toplist?id ...

  9. QQ音乐接口api,包括付费音乐、无损音乐、高品质音乐地址解析接口api

    QQ音乐网站所有音乐(包括付费.无损等版权音乐解析接口地址url). mp3 普通高品 http://dl.stream.qqmusic.qq.com/M5000012gqVh4fFvVK.mp3?v ...

随机推荐

  1. 经典创意slogan大全

    一句好的广告语,能强烈的激发人的感情,产生心理认同感.对于广告人来说,无论走到哪里,最敏感的就是广告语.一句广告语,可能只有短短几个字或一两句话,却是一个品牌的精华所在.能不能第一时间吸引受众眼球,抓 ...

  2. Android Dev Guides

    Android Dev Guides Google Java编程风格指南中文版 英文地址:http://google-styleguide.googlecode.com/svn/trunk/javag ...

  3. ytu 1301:Excel地址转换(水题,进制转换)

    Excel地址转换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 41  Solved: 11[Submit][Status][Web Board] D ...

  4. oracle中merge的详解

    Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的 ...

  5. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  6. 电赛总结(四)——波形发生芯片总结之AD9834

    一.特性参数 1.2.3V~5.5V供电 2.输出频率高达37.5MHz 3.正弦波.三角波输出 4.提供相位调制和频率调制功能 5.除非另有说明,VDD = 2.3 V至5.5 V,AGND = D ...

  7. SQL脚本--有关压缩数据库日志

    /*--压缩数据库的通用存储过程  压缩日志及数据库文件大小 因为要对数据库进行分离处理 所以存储过程不能创建在被压缩的数据库中 --邹建 2004.03(引用请保留此信息)--*/ /*--调用示例 ...

  8. MapReduce:详解Shuffle过程

    Shuffle过程,也称Copy阶段.reduce task从各个map task上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定的阀值,则写到磁盘上,否则直接放到内存中. 官方的Shuffl ...

  9. git将本地仓库上传到远程仓库

    在已有的Git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...

  10. android studio ndk 调试

    一: 先看看用 ndk-gdb 手动调试 这种方法只适用于手动编写 Android.mk 的情况,因为我们要手动 build debug 版本的 .so 文件.具体可以参考我的前一篇文章. 1 And ...