#php #simplexml
#php #simplexml
Вопрос:
Я пытаюсь использовать youtube xml для отображения некоторых данных, но появляется эта ошибка. В теории я даже знаю, что не так
$xmlData = simplexml_load_string(utf8_encode(file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$v.'?fields=title,yt:recorded,yt:statistics'))); //$v is video array
$title = (string)$xmlData->title;
$entry = $xmlData;
$namespaces = $entry->getNameSpaces(true);
$yr = $entry->children((string)$namespaces['yt']);
// get <yt:recorded> node for date and replace yyyy-mm-dd to dd.mm.yyyy
$year = substr($yr->recorded, 0,4);
$month = substr($yr->recorded, 5,2);
$day = substr($yr->recorded, 8,2);
$recorddate = $day.".".$month.".".$year;
// get <yt:stats> node for viewer statistics, and here the problem starts (error appears if view count is 0 / node does not exist)
$attrs = $yr->statistics->attributes();
$viewCount = $attrs[(string)'viewCount'];
{ echo '<p>'.$recorddate.'<br>'.$title.'<br>';
if ($viewCount > 0)
echo $viewCount.'</p></div>';
else
echo '(show some other text)</p></div>'; }
Я знаю, что для решения этой проблемы вы должны сообщить php, что node является строкой, но мне все еще не удалось сделать это, не нарушив остальной код
Комментарии:
1. Опубликуйте входные данные XML, а также полное сообщение об ошибке. Важен номер строки, обязательно укажите, какая это строка.
Ответ №1:
$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
$viewCount = $attrs['viewCount'];
}
приятно, но для тех, у кого php предыдущей версии 5.3.0, это не сработает : (
есть решения получше?
Ответ №2:
Решение, которое должно работать также для пользователей php <= 5.2
$viewCount = 0;
if (count($yr->statistics) > 0) {
$attrs = $yr->statistics->attributes();
$viewCount = $attrs['viewCount'];
}
Ответ №3:
У меня только что возникла эта проблема. Похоже, вам нужно сначала проверить, доступны ли какие-либо статистические данные, а затем попытаться получить доступ к атрибутам.
$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
$viewCount = $attrs['viewCount'];
}
YouTube, похоже, не добавляет атрибуты, если видео не было просмотрено. Итак, если у вас есть видео с количеством просмотров 0, YouTube не устанавливает количество просмотров равным 0, он просто полностью опускает его.
Ответ №4:
Вы неправильно используете приведение. Эта строка не преобразует SimpleXMLElement
объект в строку. (он преобразует строку 'viewCount'
в строку, которая не имеет смысла)
$viewCount = $attrs[(string)'viewCount'];
Это делает:
$viewCount = (string) $attrs['viewCount'];