程式碼如下:
<code><?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); ?> </code>
json檔案大致是這樣:
<code>{ "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 }</code>
上傳到主機頁面輸出結果:
Notice: Trying to get property of non-object in on line 6 {"name":null,"artist":"Piano Tribute Players","url":null}
程式碼如下:
<code><?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); ?> </code>
json檔案大致是這樣:
<code>{ "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 }</code>
上傳到主機頁面輸出結果:
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官網手冊上有個寫法類似:
<code>$obj->{$music->name}</code>
這種的,不知道有沒有關係……
(類似場景我都是用數組的多些,感覺在php裡比對象好用些。。。新手包涵~)