코드는 다음과 같습니다.
<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>
호스트 페이지 출력 결과 업로드:
주의: 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>
호스트 페이지 출력 결과 업로드:
주의: 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에서는 객체보다 사용하기 편한 것 같아요... 저는' 뉴비들 미안해요~)