Я боролся с этим часами, и я понятия не имею, почему это не работает. Мне нужно получить информацию из VideoID с помощью API YouTube и Zend, поэтому я создал такую функцию
function listYoutubeVideo($id) { $videos = array(); try { $yt = new Zend_Gdata_YouTube(); $videoFeed = $yt->getVideoEntry($id); foreach ($videoFeed as $videoEntry) { $videoThumbnails = $videoEntry->getVideoThumbnails(); $videos[] = array( 'thumbnail' => $videoThumbnails[0]['url'], 'title' => $videoEntry->getVideoTitle(), 'description' => $videoEntry->getVideoDescription(), 'tags' => implode(', ', $videoEntry->getVideoTags()), 'url' => $videoEntry->getVideoWatchPageUrl(), 'flash' => $videoEntry->getFlashPlayerUrl(), 'dura' => $videoEntry->getVideoDuration(), 'id' => $videoEntry->getVideoId() ); } } catch (Exception $e) { } return $videos; }
Причина, по которой я делаю это с массивом и функцией, – это то, что я хочу кэшировать функцию.
Я понятия не имею, что не так с кодом, я использую точно такой же, просто изменяя getVideoEntry для других типов фидов, и он работает.
Я продублировал ваш код и запускал его. Теперь getVideoEntry, похоже, возвращает данные одного видео, но по какой-то причине вы ожидаете, что это будет коллекция? Кроме того, если вы кешируете, вы можете создать некоторую проверку для пустого возврата данных.
Вот какой-то переработанный код, который отлично работал для меня:
function listYoutubeVideo($id) { $video = array(); try { $yt = new Zend_Gdata_YouTube(); $videoEntry = $yt->getVideoEntry($id); $videoThumbnails = $videoEntry->getVideoThumbnails(); $video = array( 'thumbnail' => $videoThumbnails[0]['url'], 'title' => $videoEntry->getVideoTitle(), 'description' => $videoEntry->getVideoDescription(), 'tags' => implode(', ', $videoEntry->getVideoTags()), 'url' => $videoEntry->getVideoWatchPageUrl(), 'flash' => $videoEntry->getFlashPlayerUrl(), 'dura' => $videoEntry->getVideoDuration(), 'id' => $videoEntry->getVideoId() ); } catch (Exception $e) { /* echo $e->getMessage(); exit(); */ } return $video; }
Это ошибка в структуре Zend:
Для быстрого исправления вы можете редактировать Zend / Gdata / YouTube / VideoEntry.php
строка 587:
// $videoId = substr($fullId, $position + 1); $url = $this->getFlashPlayerUrl(); $videoId = substr($url, 25, 11);
Это не фантазия, но выполняет свою работу.