2011-08-22 1 views
0

개인용 프로젝트에서 iTunes 라이브러리를 구성하는 데 도움을주고 있습니다.이 작업에는 iTunes search api을 사용하고 있습니다.에피소드를 포함하여 TV 시리즈 용 iTunes JSON 구문 분석

내가 현재 가지고있는 코드는 시리즈 자체에 대한 정보를 자동으로 구문 분석 할 수는 있지만 시즌에있는 에피소드의 수를 인식하고 정보를 파싱 할 수 있도록 변경하려고합니다. 한 시즌 동안 13 개의 에피소드를 PHP로 편집하지 않고도 다음 시즌을 위해 27 개를 편집 할 수 있습니다.

이것은 현재 사용중인 코드입니다.

$response = file_get_contents($itune_url); 
$obj = utf8_decode($response); 
$results = json_decode($obj); 

$artwork = $results->results[0]->artworkUrl100; 
$collectionViewUrl = $results->results[0]->collectionViewUrl; 
$collectionType = $results->results[0]->collectionType; 
$collectionId = $results->results[0]->collectionId; 
$collectionName = $results->results[0]->collectionName; 
$trackCount = $results->results[0]->trackCount; 
$collectionPrice = $results->results[0]->collectionPrice; 
$genre = $results->results[0]->primaryGenreName; 

$trackNumber1 = $results->results[1]->trackNumber; 
$trackName1 = $results->results[1]->trackName; 
$shortDescription1 = $results->results[1]->shortDescription; 
$longDescription1 = $results->results[1]->longDescription; 

PHP를 설정하여 $ trackCount를 인식하고 자동으로 다음 결과 집합을 생성합니까? 예 : 그런 다음

$trackNumber1 = $results->results[1]->trackNumber; 
$trackName1 = $results->results[1]->trackName; 

은 :

$trackNumber2 = $results->results[2]->trackNumber; 
$trackName2 = $results->results[2]->trackName; 

어떤 도움/조언을 주시면 감사하겠습니다, 감사합니다!

+0

'json_decode'는 문자열이 UTF-8이 될 것으로 예상하고, ** not **는 * UTF-8이 아니길 기대합니다. 배열에 열려 있습니까? – hakre

+0

@hakre 불행히도이 사이트와 새로운 PHP에 익숙하지 않은 저는 저에게 익숙한 프로젝트를 수행하면서 배우려고 노력하고 있습니다. 배열을 열어서 무슨 뜻인지 모르겠다. 나는 현재 그들을 사용하고 있다고 생각하지 않지만, 그들이 내가 원하는 결과를 얻는 데 도움이된다면, 나는 그것을 사용하고 싶습니다.이 인스턴스에서 어떻게 사용하는지에 대한 단서가 없습니다. 내가 여기서 어떻게 사용할 수 있을지에 대한 아이디어가 있습니까? – Mark

답변

0

당신은 에피소드의 모든 정보를 보유 할 JSON 결과를 반복 할 foreach (docs)을 잘 활용하고, 중첩 배열 (docs)를 만들 수 있습니다. 그러면 JSON 결과를 얻는 단계를 다음과 같이 줄일 수 있습니다.

$url = 'http://itunes.apple.com/search?term=firefly&media=tvShow&entity=tvEpisode&attribute=showTerm'; 
$json = file_get_contents($url); 
$data = json_decode($json); 

$results = array(); 
foreach ($data->results as $r) { 
    $season = $r->collectionName; 
    $episode = $r->trackNumber; 
    $results[$season][$episode] = $r; 
} 

결과 배열의 구조는 다음과 같습니다.

array (
    'Firefly, Season 1' => 
    array (
    1 => 
    array (
     'wrapperType' => 'track', 
     'kind' => 'tv-episode', 
     'artistId' => 151198837, 
     'collectionId' => 151801083, 
     'trackId' => 151961947, 
     'artistName' => 'Firefly', 
     'collectionName' => 'Firefly, Season 1', 
     'trackName' => 'Serenity', 
     ... 
    ), 
    ... 
), 
) 

는 에피소드 Bushwhacked에 대한 $results['Firefly, Season 1'][3] 같은 번호로 개별 에피소드를 액세스하거나 할 수 있음을 의미 할 수 있습니다 시즌 돌이 : 물론

foreach ($results['Firefly, Season 1'] as $episode) { 
    echo $episode['trackName'], PHP_EOL, $episode['longDescription'], PHP_EOL; 
} 

, 당신이 걱정하지 않는 경우 시즌 (모든 결과는 쇼의 한 시즌을 반환합니까?) 또는 결과에서 여러 쇼를 가져오고 싶습니까 (무엇을 검색하고 있습니까?) 다음과 같은 프로세스가 다른 조건과 더 많이 (또는 그 이하) 결과 배열 구조의 깊이.

+0

모든 결과는 (입력 된 ID 번호로 정의 된) 시즌의 에피소드를 반환합니다. 내가 할 계획은 시리즈에 대한 정보를 수집하고 MP4 파일에 태그하기 위해 해당 정보를 사용하도록 액세스 할 수있는 데이터베이스에 입력하는 것입니다. [link] (http://thetvdb.com/?tab=series&id=80270&lid=7)처럼 – Mark