Разбор iTunes JSON для сериалов, включая эпизоды - PullRequest
0 голосов
/ 22 августа 2011

Я работаю над личным проектом, чтобы помочь организовать мою библиотеку iTunes, для этого я использую API поиска iTunes .

Код, который у меня есть в настоящее время, позволяет мнеавтоматически разбираю информацию для самой серии, но я пытаюсь ее изменить, чтобы она распознала, сколько эпизодов в сезоне, и также проанализировала информацию для них, без необходимости редактировать php для 13 эпизодов для одногосезон, затем 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 голосов
/ 22 августа 2011

Вы можете использовать foreach ( документы ) для циклического просмотра результатов JSON и вложенные массивы ( документы ) для хранения всей информации об эпизодах.Это может привести к тому, что ваша фаза определения смысла 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',
      ...
    ),
    ...
  ),
)

Thisозначает, что вы можете получить доступ к отдельным эпизодам по номеру, например $results['Firefly, Season 1'][3] для эпизода Bushwhacked, или вы можете выполнить цикл в течение сезона:

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

Конечно, если вас не волнует сезонвсе ваши результаты возвращают один сезон шоу?) или вы хотите получить несколько шоу в результатах (что вы ищете ?!), тогда можно использовать один и тот же процесс, только с другими критериями и большей (или меньшей) глубинойструктура массива результатов.

...