在数组中获取Youtube VideoID详细信息

时间:2011-01-11 03:24:00

标签: php api zend-framework youtube zend-gdata

我一直在努力工作几个小时,我不知道为什么不工作。 我需要使用YouTube API和Zend从VideoID获取详细信息,因此我创建了一个类似这样的函数

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;
}

我使用数组和函数执行此操作的原因是因为我想缓存该函数。

我不知道代码有什么问题,我使用完全相同的只是为其他类型的Feed更改getVideoEntry并且它可以工作。

2 个答案:

答案 0 :(得分:4)

这是Zend框架中的一个错误:

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);

这不是花哨但是完成了工作。

答案 1 :(得分:3)

我复制了你的代码并运行它。现在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;
}