Получить детали видео YouTubeID в массиве - PullRequest
4 голосов
/ 11 января 2011

Я боролся с этим часами и понятия не имею, почему не работает.Мне нужно получить детали из VideoID, используя YouTube API и 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 для других типов каналов, и это работает.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2012

Это ошибка в Zend Framework:

http://framework.zend.com/issues/browse/ZF-12461?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel#issue-tabs

Для быстрого исправления вы можете отредактировать Zend / Gdata / YouTube / VideoEntry.php

строка 587:

// $videoId = substr($fullId, $position + 1);
$url = $this->getFlashPlayerUrl();
$videoId = substr($url, 25, 11);

Это не модно, но выполняет свою работу.

3 голосов
/ 30 июня 2011

Я продублировал ваш код и запустил его.Теперь 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;
}
...