10周年纪念勋章 - 梦次元10周年纪念勋章1周年纪念勋章 - 论坛1岁纪念勋章次元守护者 - 对小镇做出巨大贡献的小伙伴才可以拥有的勋章(medal of supporter)大鲸 - 2015圣诞节 - 舰队collection

[发布&demo] PHP向 一个简易的虾米,网易云音乐接口解析类

1#
发表于 2015-4-28 07:28:09 | 查看: 6830| 回复: 14


最近在写论坛的音区和电台功能 用到了虾米和网易的资源
在这里分享一下自己整合的一个功能简易的类 唯一的效果只是访问对方的API接口然后返回歌曲的信息使用方法很简单
$xiami = GetSong::xiami(1774092474)  返回一个虾米id为1774092474的歌曲数据数组
返回的数据有(网易同理)
=>['url']                      MP3地址
=>['title']                    歌曲标题
=>['album_name']      专辑标题
=>['artist_name']       艺术家名字
=>['album_id']           专辑ID
=>['pic']                      封面图片地址
=>['type']                   网站类型 (虾米是xiami 网易是wymusic)


针对虾米的封面地址 返回的默认是最小尺寸的 如果想要大尺寸的封面的话要在数据返回以后修改一下字符串
例如 $xiami['pic'] = str_replace('_1','',$xiami['pic']);   删除字符串中的"_1"
由于实在是非常简易就不多做解说了下面是代码
  1. <?php
  2. class GetSong{
  3.         public static function xiami($id){
  4.                 $data = array();
  5.                 $content = self::__curl('http://www.xiami.com/song/playlist/id/'.$id.'/object_name/default/object_id/0/cat/json', $_SERVER['HTTP_HOST']);
  6.                 $json = json_decode($content,true);
  7.                 $song = $json['data']['trackList'][0];
  8.                 $data['url'] = self::__getXiamiMp3($song['location']);
  9.                 $data['title'] = $song['title'];
  10.                 $data['album_name'] = $song['album_name'];
  11.                 $data['artist_name'] = $song['artist'];
  12.                 $data['album_id'] = $song['album_id'];
  13.                 $data['pic'] = $song['pic'];
  14.                 $data['type'] = 'xiami';
  15.                 if(!empty($data['title'])){
  16.                         return $data;
  17.                 }else{
  18.                         return false;
  19.                 }
  20.         }

  21.         public static function wymusic($id){
  22.                 $url = 'http://music.163.com/api/song/detail/?id='.$id.'&ids=['.$id.']';
  23.                 $content = self::__curl($url,'http://music.163.com/');
  24.                 $json = json_decode($content,true);
  25.                 $song = $json['songs'][0];
  26.                 $album = $song['album'];

  27.                 $data = array();
  28.                 $data['url'] = $song['mp3Url'];
  29.                 $data['title'] = $song['name'];
  30.                 $data['album_id'] = $album['id'];
  31.                 $data['album_name'] = $album['name'];
  32.                 $data['artist_name'] = $song['artists'][0]['name'];
  33.                 $data['pic'] = $album['picUrl'];
  34.                 $data['type'] = '163music';
  35.                 if(!empty($data['title'])){
  36.                         return $data;
  37.                 }else{
  38.                         return false;
  39.                 }
  40.         }

  41.    
  42.         private static function __getXiamiMp3($location){
  43.                 $count = (int)substr($location, 0, 1);
  44.                 $url = substr($location, 1);
  45.                 $line = floor(strlen($url) / $count);
  46.                 $loc_5 = strlen($url) % $count;
  47.                 $loc_6 = array();
  48.                 $loc_7 = 0;
  49.                 $loc_8 = '';
  50.                 $loc_9 = '';
  51.                 $loc_10 = '';
  52.                 while ($loc_7 < $loc_5){
  53.                         $loc_6[$loc_7] = substr($url, ($line+1)*$loc_7, $line+1);
  54.                         $loc_7++;
  55.                 }
  56.                 $loc_7 = $loc_5;
  57.                 while($loc_7 < $count){
  58.                         $loc_6[$loc_7] = substr($url, $line * ($loc_7 - $loc_5) + ($line + 1) * $loc_5, $line);
  59.                         $loc_7++;
  60.                 }
  61.                 $loc_7 = 0;
  62.                 while ($loc_7 < strlen($loc_6[0])){
  63.                         $loc_10 = 0;
  64.                         while ($loc_10 < count($loc_6)){
  65.                                 $loc_8 .= @$loc_6[$loc_10][$loc_7];
  66.                                 $loc_10++;
  67.                         }
  68.                         $loc_7++;
  69.                 }
  70.                 $loc_9 = str_replace('^', 0, urldecode($loc_8));
  71.                 return $loc_9;
  72.         }

  73.         private static function __curl($url,$referer){
  74.                 $curl = curl_init();
  75.                 curl_setopt($curl,CURLOPT_URL,$url);
  76.                 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  77.                 curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
  78.                 curl_setopt ($curl, CURLOPT_REFERER, $url);
  79.                 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7");
  80.                 $src = curl_exec($curl);
  81.                 curl_close($curl);
  82.                 return $src;
  83.         }

  84.       

  85. }
  86. ?>
复制代码



回复

使用道具 举报

11
雪初音2015 - Vocaloid库特 - Little Busters - 库特(万圣)original(3) - 绘师: 和錆魔法店員おるる☆スタッフ - MUGEN 中野TRF沙耶 - 绘师: 和錆大鲸 - 2015圣诞节 - 舰队collection沙沙宫纱夜 - 学战都市Asterisk西园寺兔 - 对魔导学园35试验小队original(16) - 绘师: nyanya吽 - Show By Rock!!夜刀神十香 - 约会大作战
2#
发表于 2015-4-28 23:39:41
路过  膜拜下大神(php完全不懂)

空心树幸运的捡到了 12 枚 星币

好像刚来的日子一样 安静的月光 冰冻的风 好黑 好冷 好饿
回复

使用道具 举报

3#
发表于 2015-4-29 04:12:08 自豪地使用爪机中
看不懂啊
回复

使用道具 举报

10周年纪念勋章 - 梦次元10周年纪念勋章
4#
发表于 2015-5-3 17:48:08
来赞一下
回复

使用道具 举报

5#
发表于 2015-5-10 15:37:36
大神请受我一拜
sometime somewhere i became so numb?
回复

使用道具 举报

由亚 - 由亚(yourdiary)阿良良木 月火 - 物语系列四糸乃 - 约会大作战香风智乃 - 请问您今天要来点兔子吗?桐间纱路 - 请问您今天要来点兔子吗?宇治松 千夜 - 请问您今天要来点兔子吗?天天座 理世 - 请问您今天要来点兔子吗?original(2) - 绘师: 和錆
6#
发表于 2015-5-10 19:39:20
前面 一知半解   后面完成不知道在看什么

绝对双刃茱莉经过时不小心看到了坛娘的胖次,被揍飞了 9 枚 星币

回复

使用道具 举报

7#
发表于 2015-5-15 12:41:39
谢谢,困扰好久的问题,终于在你的引领下解决了。。
回复

使用道具 举报

8#
发表于 2015-7-2 15:09:56 自豪地使用爪机中
看不懂,,,,,,,
回复

使用道具 举报

9#
发表于 2015-7-7 18:13:09
看不懂程序设计
回复

使用道具 举报

10#
发表于 2015-7-9 11:53:12
完全看不懂我会乱说?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则