Nickdoesmatter
Новичок
Добрый вечер!
Дочитываю книгу Head First PHP&MySQL (издательство O'REILLY).
В 12-й главе есть пример кода, в котором на основе xml-данных, полученных от сервера YouTube, создается XML-объект, а затем из этого объекта извлекаются нужные сведения для дальнейшего использования в коде PHP.
Но мне не понятен фрагмент, где извлекаются все yt-элементы одной записи, вот этот:
Почему здесь дочерние элементы запрашиваются у элемента $media, а не у элемента $entry?
Ведь в $media мы сохранили только элементы, относящиеся к пространству имен media, разве нет?
Как мы можем извлечь элементы, относящиеся к пространству имен yt, из массива, в котором сохранены только элементы, относящиеся к пространству имен media?
Или я чего-то не понимаю? Объясните, пожалуйста.
Дочитываю книгу Head First PHP&MySQL (издательство O'REILLY).
В 12-й главе есть пример кода, в котором на основе xml-данных, полученных от сервера YouTube, создается XML-объект, а затем из этого объекта извлекаются нужные сведения для дальнейшего использования в коде PHP.
Но мне не понятен фрагмент, где извлекаются все yt-элементы одной записи, вот этот:
PHP:
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
Почему здесь дочерние элементы запрашиваются у элемента $media, а не у элемента $entry?
Ведь в $media мы сохранили только элементы, относящиеся к пространству имен media, разве нет?
Как мы можем извлечь элементы, относящиеся к пространству имен yt, из массива, в котором сохранены только элементы, относящиеся к пространству имен media?
Или я чего-то не понимаю? Объясните, пожалуйста.
PHP:
<?php
define('YOUTUBE_URL', 'http://gdata.youtube.com/feeds/api/users/aliensabductedme/favorites');
define('NUM_VIDEOS', 5);
// Read the XML data into an object
$xml = simplexml_load_file(YOUTUBE_URL);
$num_videos_found = count($xml->entry);
if ($num_videos_found > 0) {
echo '<table><tr>';
for ($i = 0; $i < min($num_videos_found, NUM_VIDEOS); $i++) {
// Get the title
$entry = $xml->entry[$i];
$media = $entry->children('http://search.yahoo.com/mrss/');
$title = $media->group->title;
// Get the duration in minutes and seconds, and then format it
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$length_min = floor($attrs['seconds'] / 60);
$length_sec = $attrs['seconds'] % 60;
$length_formatted = $length_min . (($length_min != 1) ? ' minutes, ':' minute, ') .
$length_sec . (($length_sec != 1) ? ' seconds':' second');
// Get the video URL
$attrs = $media->group->player->attributes();
$video_url = $attrs['url'];
// Get the thumbnail image URL
$attrs = $media->group->thumbnail[0]->attributes();
$thumbnail_url = $attrs['url'];
// Display the results for this entry
echo '<td style="vertical-align:bottom; text-align:center" width="' . (100 / NUM_VIDEOS) . '%"><a href="' . $video_url . '">' .
$title . '<br /><span style="font-size:smaller">' . $length_formatted . '</span><br /><img src="' . $thumbnail_url . '" /></a></td>';
}
echo '</tr></table>';
}
else {
echo '<p>Sorry, no videos were found.</p>';
}
?