не могу решить Node больше не существует ошибка - PullRequest
1 голос
/ 01 мая 2011

Я пытаюсь использовать 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, что узел является строкой, но мне все еще не удалось сделать это, не нарушив остальной код

Ответы [ 4 ]

3 голосов
/ 06 августа 2011
$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
 $viewCount = $attrs['viewCount'];
}

хорошо, но для тех, у кого php версии 5.3.0, это не сработает :( какие-нибудь лучшие решения?

2 голосов
/ 08 августа 2011

Решение, которое должно работать и для пользователей php <= 5.2 </p>

  $viewCount = 0;
if (count($yr->statistics) > 0) {
    $attrs = $yr->statistics->attributes(); 
    $viewCount = $attrs['viewCount'];
}
1 голос
/ 04 августа 2011

У меня только что была эта проблема. Похоже, вам нужно сначала проверить, доступна ли какая-либо статистика, а затем попытаться получить доступ к атрибутам.

$viewCount = 0;
if ($yr->statistics->count() > 0) {
    $attrs = $yr->statistics->attributes(); 
    $viewCount = $attrs['viewCount'];
}

YouTube не добавляет атрибуты, если видео не просматривалось. Поэтому, если у вас есть видео с количеством просмотров 0, YouTube не устанавливает для viewCount значение 0, а просто полностью его пропускает.

0 голосов
/ 01 мая 2011

Вы не используете кастинг правильно. Эта строка NOT приводит объект SimpleXMLElement к строке. (это приводит строку 'viewCount' к строке, которая не имеет смысла)

$viewCount = $attrs[(string)'viewCount'];

Этот делает:

$viewCount = (string) $attrs['viewCount'];
...