【问题标题】:Youtube API: losing data via curl in PHP?Youtube API:通过 PHP 中的 curl 丢失数据?
【发布时间】:2011-11-27 08:21:18
【问题描述】:

我确信这可能是一个简单的解决方案,但我看不到我的错误。我正在对 youtube 进行 API 调用,以使用视频 ID 获取有关 youtube 视频的一些基本信息;具体来说,我想要的是(1)标题、(2)描述、(3)标签和(4)缩略图。

当我通过网络浏览器加载 API 网址时,我会看到所有数据。我不想在这个问题中粘贴整个回复,而是将以下网址粘贴到您的浏览器中,您会看到我看到的内容:http://gdata.youtube.com/feeds/api/videos/_83A00a5mG4

如果您仔细观察,您会看到媒体:缩略图、媒体:关键字、内容等。我想要的一切都在那里。现在麻烦了……

当我通过以下函数(我从 Vimeo api 复制...)加载相同的 url 时,缩略图和关键字根本不存在。

function curl_get($url) {
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    $return = curl_exec($curl);
    curl_close($curl);
    return $return;
}   

// youtube_get_ID is defined elsewhere...

$request_url = "http://gdata.youtube.com/feeds/api/videos/" . youtube_get_ID($url);
$video_data = simplexml_load_string(curl_get($request_url));

这些函数确实给了我 一些 数据的响应,但是缺少关键字和缩略图。谁能告诉我为什么我的缩略图和关键字丢失了?感谢您的帮助!

【问题讨论】:

    标签: api curl youtube thumbnails


    【解决方案1】:

    这是link for documentation

    这是我写的一个函数:

    function get_youtube_videos($max_number, $user_name) {
        $xml = simplexml_load_file('http://gdata.youtube.com/feeds/api/users/' . $user_name . '/uploads?max-results=' . $max_number);
    
        $server_time = $xml->updated;
    
        $return = array();
    
        foreach ($xml->entry as $video) {
            $vid = array();
    
            $vid['id'] = substr($video->id,42);
            $vid['title'] = $video->title;
            $vid['date'] = $video->published;
            //$vid['desc'] = $video->content;
    
            // get nodes in media: namespace for media information
            $media = $video->children('http://search.yahoo.com/mrss/');
    
            // get the video length
            $yt = $media->children('http://gdata.youtube.com/schemas/2007');
            $attrs = $yt->duration->attributes();
            $vid['length'] = $attrs['seconds'];
    
            // get video thumbnail
            $attrs = $media->group->thumbnail[0]->attributes();
            $vid['thumb'] = $attrs['url'];
    
            // get <yt:stats> node for viewer statistics
            $yt = $video->children('http://gdata.youtube.com/schemas/2007');
            $attrs = $yt->statistics->attributes();
            $vid['views'] = $attrs['viewCount'];
    
            array_push($return, $vid);
        }
    
        return $return;
    }
    

    下面是实现:

    $max_videos = 9;
    $videos = get_youtube_videos($max_videos, 'thelonelyisland');
    
    foreach($videos as $video) {
        echo $video['title'] . '<br/>';
        echo $video['id'] . '<br/>';
        echo $video['date'] . '<br/>';
        echo $video['views'] . '<br/>';
        echo $video['thumb'] . '<br/>';
        echo $video['length'] . '<br/>';
        echo '<hr/>';
    }
    

    【讨论】:

    • 如果 youtube 关闭或没有及时响应会发生什么。这失败了。 curl 将是一个更好的选择来检索设置了超时的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2012-12-05
    • 2021-09-17
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多