2011-08-22 46 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