API YouTube: потеря данных через curl в PHP? - PullRequest
2 голосов
/ 29 сентября 2011

Я уверен, что это, вероятно, простое решение, но я не вижу свою ошибку. Я делаю вызов API на YouTube, чтобы получить основную информацию о видео на YouTube, используя идентификатор видео; В частности, я хочу (1) заголовок, (2) описание, (3) теги и (4) миниатюру.

Когда я загружаю URL-адрес API через веб-браузер, я вижу все данные. Я не хочу вставлять полный ответ в этот вопрос, но вставьте следующий URL в ваш браузер, и вы увидите то, что я вижу: http://gdata.youtube.com/feeds/api/videos/_83A00a5mG4

Если вы посмотрите внимательно, вы увидите медиа: миниатюру, медиа: ключевые слова, контент и т. Д. Все, что я хочу, есть. Теперь неприятности ...

Когда я загружаю этот же URL через следующие функции (которые я скопировал из API Vimeo ...), миниатюра и ключевые слова просто отсутствуют.

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

Эти функции дают мне ответ с некоторыми данными, но ключевые слова и эскиз отсутствуют. Может ли кто-нибудь сказать мне, почему мои миниатюра и ключевые слова отсутствуют? Спасибо за любую помощь!

1 Ответ

0 голосов
/ 14 марта 2012

Вот ссылка для документации по этому вопросу.

Вот функция, которую я написал:

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/>';
}
...