Я пытаюсь получить $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']