2011-08-22 59 views
0

我正在製作一個個人項目來幫助組織我的iTunes資料庫,爲此我使用的是iTunes search api爲電視劇解析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,**不**爲*不* UTF-8。你打開數組? – hakre

+0

@hakre不幸的是,我對這個網站都很陌生,並且對PHP也很陌生,我正在嘗試在做一個對我有用的項目時學習。我不確定你打開數組的意思是什麼?我不認爲目前正在使用它們,但是如果它們能幫助我得到我想要的結果,我願意使用它們,只是沒有關於如何在這種情況下使用它們的線索?關於我如何在這裏使用它們的任何想法? – Mark

回答

0

您可以很好地利用foreachdocs)來遍歷JSON結果,並嵌套數組(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', 
     ... 
    ), 
    ... 
), 
) 

這意味着您可以按編號訪問單個事件,像$results['Firefly, Season 1'][3]爲情節Bushwhacked或者你也可以遍歷一個賽季:

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