Я пытаюсь получить $xml->entry->yt:statistics->attributes()->viewCount
, и я пробовал некоторые вещи с SimpleXML, и я не могу заставить его работать!
Попытка №1
<?php $xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google"); echo $xml->entry[0]->yt:statistics['viewCount']; ?>
Попытка №2
<?php $xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google"); echo $xml->entry[0]->yt:statistics->attributes()->viewCount; ?>
Оба из них возвращаются пустым, хотя SimpleXML работает, я пытался получить заголовок фида, который сработал!
Есть идеи?
Я просмотрел множество других примеров на SO и других сайтах, но почему-то это не работает? PHP распознает «:» как отсечку, или я просто делаю что-то глупое?
Спасибо, любые отзывы очень ценятся!
Если вы просто хотите получить количество просмотров видео с YouTube, вам необходимо указать идентификатор видео. Идентификатор youtube находится в каждом видеоролике. Например, «http://www.youtube.com/watch?v=ccI-MugndOU», поэтому id – ccI-MugndOU. Чтобы получить счет, попробуйте код ниже
$sample_video_ID = "ccI-MugndOU"; $JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$sample_video_ID}&alt=json"); $JSON_Data = json_decode($JSON); $views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'}; echo $views;
Я бы использовал компонент gdata из рамки zend. Также доступен как отдельный модуль, поэтому вам не нужно использовать весь zend.
Префикс yt:
указывает, что этот элемент находится в другом «пространстве имен XML» из остальной части документа. Вы должны сказать SimpleXML переключиться на это пространство имен с помощью метода ->children()
.
Строка, которую вы пытались, должна выглядеть так:
echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount;
Чтобы сломать это:
(string)
– это просто хорошая привычка: вам нужно содержимое строки атрибута, а не объект SimpleXML, представляющий его $xml->entry[0]
– как и ожидалось ->children('yt', true)
– переключиться на пространство имен с локальным псевдонимом 'yt' ->statistics
– как и ожидалось ->attributes(NULL)
– технически атрибут «viewCount» возвращается в пространство имен по умолчанию, поскольку он не имеет префикса «yt:», поэтому нам нужно вернуться назад, чтобы увидеть его ->viewCount
– running ->attributes()
дает нам ничего, кроме атрибутов, к которым обращаются ->foo
not ['foo']