2017-02-02 4 views
1

Я понимаю, что на это, возможно, был дан ответ, но, посмотрев и просмотрев множество вопросов/ответов и других веб-сайтов, я не могу найти подходящий ответ.Youtube получить титул видео от id

Я пытаюсь создать страницу, на которой будет показано какое-то видео с Youtube. Он покажет изображение и заголовок. Мне удалось сделать это, хотя у меня проблемы с названием. С кодом, который я использую, он очень медленный при загрузке. Я предполагаю, что он загружает фактический сайт, чтобы получить название.

Это то, что я использую для получения названий в настоящее время.

function get_youtube_id($url){ 
    parse_str(parse_url($url, PHP_URL_QUERY), $my_array_of_vars); 
    return $my_array_of_vars['v']; 
} 
function get_youtube_title($video_id){ 
$url = "http://www.youtube.com/watch?v=".$video_id; 

$page = file_get_contents($url); 
$doc = new DOMDocument(); 
$doc->loadHTML($page); 

$title_div = $doc->getElementById('eow-title'); 
$title = $title_div->nodeValue; 

return $title; 

} 

Итак, как бы наилучшим образом получить титул youtube по id. Код, который у меня есть, работает, но он также очень сильно замедляет загрузку страницы.

Благодаря

+1

лучше использовать данные API yt - https://developers.google.com/youtube/v3/code_samples/php – marmeladze

ответ

0

Вы можете использовать Open Graph

Checkout This Link

<?php 
    require_once('OpenGraph.php'); 

    function get_youtube_title($video_id){ 
     $url = "http://www.youtube.com/watch?v=".$video_id; 
     $graph = OpenGraph::fetch($url); 
     // You can get title from array 
     return $graph->title; 
    } 
+0

Привет, благодарю вас за ваш ответ! Как получить заголовок из массива? –

+0

вы можете получить 'echo $ og-> title;' с этим – ImBS

+0

вы можете сослаться на ссылку, которую вы можете легко понять – ImBS

3

Вот простой способ сделать это с помощью PHP и нет библиотеки. YouTube уже позволяет получать видеоинформацию детали в формате JSON, поэтому все, что вам нужно, это простая функция, как это:

function get_youtube_title($ref) { 
     $json = file_get_contents('http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=' . $ref . '&format=json'); //get JSON video details 
     $details = json_decode($json, true); //parse the JSON into an array 
     return $details['title']; //return the video title 
    } 

Параметр функции является идентификатор видео. Вы также можете добавить второй параметр с запросом конкретной детали и изменить имя функции, чтобы вы могли получать любые данные из JSON, которые вы хотели бы.

EDIT:

Если вы хотели бы получить любую часть информации из возвращенных деталей видео вы можете использовать эту функцию:

function get_youtube_details($ref, $detail) { 
    if (!isset($GLOBALS['youtube_details'][$ref])) { 
     $json = file_get_contents('http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=' . $ref . '&format=json'); //get JSON video details 
     $GLOBALS['youtube_details'][$ref] = json_decode($json, true); //parse the JSON into an array 
    } 

    return $GLOBALS['youtube_details'][$ref][$detail]; //return the requested video detail 
} 

Если вы запрашиваете разные подробности о том же видео, возвращаемые данные JSON хранятся в массиве $GLOBALS, чтобы предотвратить необходимые вызовы до file_get_contents.

Кроме того, allow_url_fopen должен быть включен в ваш php.ini для работы file_get_contents, что может быть проблемой для общих хостов.

+0

Спасибо! Это работало намного быстрее! –

Смежные вопросы