解析电视剧的iTunes JSON,包括剧集

时间:2011-08-22 12:27:09

标签: php json parsing itunes

我正在开展一个个人项目来帮助整理我的iTunes资料库,为此我正在使用iTunes search api

我目前的代码允许我自动解析系列本身的信息,但我正在尝试更改它,以便它能识别一季中有多少集,并为它们解析信息,我不得不为一个季节编辑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;

任何帮助/建议都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分: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;
}

当然,如果你不关心这个季节(你的所有结果都会回归一个节目的一个季节?)或者想要在结果中获得多个节目(你在搜索什么?!)那么同样的过程可以使用,只是使用不同的标准和结果数组结构的更多(或更少)深度。