代码如下:
<?php
$url = 'http://music.163.com/api/song/detail/?id='.$_GET['id'].'&ids=%5B'.$_GET['id'].'%5D&csrf_token=';
$json = file_get_contents($url);
$obj = json_decode($json);
$array = array(
"name" => $obj->songs[0]->bMusic->name,
"artist" => $obj->songs[0]->artists[0]->name,
"url" => $obj->songs[0]->mp3Url
);
echo json_encode($array);
?>
json文件大致是这样:
{
"songs": [
{
"starred": false,
"popularity": 95,
"starredNum": 0,
"playedNum": 0,
"dayPlays": 0,
"hearTime": 0,
"mp3Url": "http://m2.music.126.net/2b980AHtVx18bJ_Z9MhKXA==/2830142929914115.mp3",
"rtUrls": [],
"status": 1,
"crbt": null,
"bMusic": {
"volumeDelta": 0.095421,
"playTime": 200000,
"bitrate": 96000,
"dfsId": 2830142929914115,
"sr": 44100,
"name": "Set Fire To The Rain",
"id": 24667967,
"size": 2436177,
"extension": "mp3"
},
"rtUrl": null,
"position": 2,
"duration": 200000,
"alias": [],
"hMusic": {
"volumeDelta": -0.05,
"playTime": 200000,
"bitrate": 320000,
"dfsId": 2830142929914113,
"sr": 44100,
"name": "Set Fire To The Rain",
"id": 24667965,
"size": 8056892,
"extension": "mp3"
},
"mMusic": {
"volumeDelta": 0.41,
"playTime": 200000,
"bitrate": 160000,
"dfsId": 2830142929914114,
"sr": 44100,
"name": "Set Fire To The Rain",
"id": 24667966,
"size": 4042394,
"extension": "mp3"
},
"lMusic": {
"volumeDelta": 0.095421,
"playTime": 200000,
"bitrate": 96000,
"dfsId": 2830142929914115,
"sr": 44100,
"name": "Set Fire To The Rain",
"id": 24667967,
"size": 2436177,
"extension": "mp3"
},
"album": {
"songs": [],
"paid": false,
"onSale": false,
"status": 1,
"tags": "",
"blurPicUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
"companyId": 0,
"pic": 2539871860943087,
"description": "",
"subType": null,
"alias": [],
"picId": 2539871860943087,
"briefDesc": "",
"artist": {
"img1v1Id": 0,
"alias": [],
"picId": 0,
"briefDesc": "",
"picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"albumSize": 0,
"img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"trans": "",
"musicSize": 0,
"name": "",
"id": 0
},
"picUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
"commentThreadId": "R_AL_3_1983765",
"artists": [
{
"img1v1Id": 0,
"alias": [],
"picId": 0,
"briefDesc": "",
"picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"albumSize": 0,
"img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"trans": "",
"musicSize": 0,
"name": "Piano Tribute Players",
"id": 99094
}
],
"copyrightId": 0,
"publishTime": 1321804800000,
"company": "CC Entertainment",
"name": "Piano Tribute to Adele",
"id": 1983765,
"type": "专辑",
"size": 14
},
"commentThreadId": "R_SO_4_21515271",
"artists": [
{
"img1v1Id": 0,
"alias": [],
"picId": 0,
"briefDesc": "",
"picUrl": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"albumSize": 0,
"img1v1Url": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
"trans": "",
"musicSize": 0,
"name": "Piano Tribute Players",
"id": 99094
}
],
"copyrightId": 0,
"score": 95,
"fee": 0,
"mvid": 0,
"ftype": 0,
"rtype": 0,
"rurl": null,
"copyFrom": "",
"audition": null,
"ringtone": "",
"disc": "",
"no": 2,
"name": "Set Fire To The Rain",
"id": 21515271
}
],
"equalizers": {},
"code": 200
}
上传到主机页面输出结果:
Notice: Trying to get property of non-object in on line 6 {"name":null,"artist":"Piano Tribute Players","url":null}
json还有两个命令:
json_last_error_msg 这个是获取json的错误消息的。
json_last_error 返回最后发生的错误
你可以尝试使用这两个命令来看一下json_encode出现了什么错误。
记得见过PHP官网手册上有个写法类似:
这种的,不知道有没有关系……
(类似场景我都是用数组的多些,感觉在php里比对象好用些。。。新手包涵~)
最好是一层一层输出看看是哪个变量取值时出了错,从$obj开始输出,看看$obj的结构
将json转换成UTF-8编码,移除其中的BOM也不行,还是返回null
用var_dump($obj)看看json对象的内容