杨小杰博客提供免费教程下载和网站搭建技术教程,主要分享和发布网站源码,致力创造一个高质量网络资源教程的分享平台

酷狗歌单获取歌曲信息的接口源码

Young小杰2018-6-22 11:08网站搭建(0)975查询中……小标签: api 原创 抓包入门

可笑的是一个技术小白离开了百度啥也不会写,全程靠百度。


<?php
/**
 * @author 	Youngxj <blog@youngxj.cn>
 * @time   	2018年6月22日
 * @todo 	利用酷狗歌单进行获取酷狗歌曲信息
 */

// 访问短网址出现的地址
// http://m.kugou.com/share/zlist.html?u=25230245&h1=142560927507380788791872687420293028022&h2=da7ce5776afd5fdba03daa05f4a19860&listid=25&uid=25230245&type=0&_t=1528116907&token=2b631b0f122f5dc5c0ca758374c4d190eb8bde2ea382bf7a29bacfd5bb439489&sign=c0c7fe2caee03445b51bf8961308174b&chl=qq_client

// 歌单列表接口
// http://m.kugou.com/zlist/list?listid=25&type=0&uid=25230245&sign=c0c7fe2caee03445b51bf8961308174b&_t=1528116907&pagesize=30&json=&page=1&token=2b631b0f122f5dc5c0ca758374c4d190eb8bde2ea382bf7a29bacfd5bb439489
// 关键值 uid sign  _t  token listid  type

// 获取歌曲信息的接口
// http://m.kugou.com/app/i/getSongInfo.php?hash=348CE533CE66E6DCEDA4A9FD63AB6D86&cmd=playInfo&is_share=1

# 设置json格式
header('Content-type: application/json');  

#缓存文件名(最好使用json文件格式)
$fileName = 'data.json';

# 酷狗歌单分享出来的短网址
$kgUrl = "http://t.kugou.com/1md5hf5t8V2";  

file_get_contents($kgUrl);
# 获取歌单访问后302跳转的header头信息
$responseInfo = $http_response_header;  
# 第五条记录为Location跳转地址里面包含多个关键值
$local = $responseInfo['5'];

# 下面是蹩脚正则取值
// uid(疑似用户id)
$zz_uid = "/uid=(.*?)&/";
preg_match($zz_uid,$local,$uid);
// sign
$zz_sign = "/sign=(.*?)&/";
preg_match($zz_sign,$local,$sign);
// _t
$zz_t = "/_t=(.*?)&/";
preg_match($zz_t,$local,$t);
// listid(疑似歌单id)
$zz_listid = "/listid=(.*?)&/";
preg_match($zz_listid,$local,$listid);
// type
$zz_type = "/type=(.*?)&/";
preg_match($zz_type,$local,$type);
// token
$zz_token = "/token=(.*?)&/";
preg_match($zz_token,$local,$token);

//echo '<br/>';
# 把取到的值变量定义
$uid = $uid['1'];
$sign = $sign['1'];
$t = $t['1'];
$listid = $listid['1'];
$type = $type['1'];
$token = $token['1'];

# 这里是呼应后面文本缓存的
# 主要是判断文本缓存中的token是否与当前获取的token是否一致
# 如果一致则读取文本缓存的json
# 如果不一致则使用后面的获取最新
# 继续写入文本缓存
if(is_file($fileName)){
	$dataJson = file_get_contents($fileName);
	$dataJsons = json_decode($dataJson,1);

	if($token == $dataJsons['token']){
		echo $dataJson;
		exit();
	}
}

# 这个地址是获取歌单列表里有多少歌
$listUrl = 'http://m.kugou.com/zlist/list?listid='.$listid.'&type='.$type.'&uid='.$uid.'&sign='.$sign.'&_t='.$t.'&pagesize=30&json=&page=1&token='.$token;


$list = file_get_contents($listUrl);
//var_dump($list);
$lists = json_decode($list,1);
# 统计歌单歌曲总数
$coun = count($lists["list"]["info"]);
$arr = array('token'=>$token);
for ($i=0; $i < $coun; $i++) {
	# 利用前面歌单列表取到的hash
	# 进行二次临时歌曲地址寻找
	$hash = $lists["list"]["info"][$i]['hash'];
	$getSongInfoUrl = 'http://m.kugou.com/app/i/getSongInfo.php?hash='.$hash.'&cmd=playInfo&is_share=1';
	$get = file_get_contents($getSongInfoUrl);
	$getjson = json_decode($get,1);
	$arr[$i] = $getjson;
}
# 到这里已经能正常输出歌单里所有歌曲的信息
echo $data_json = json_encode($arr,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);


# 后面的为文本进行缓存的技术
$myfile = fopen($fileName, "w") or die("无法打开文件,请确定是否有权限编辑文件");
$txt = $data_json;
fwrite($myfile, $txt);
fclose($myfile);
如果有什么错误,请指出来,技术小白不易。


本文参考《网页抓包之我的歌单》进行长达一个小时进行编写调试。


发表评论: