Yog*_*gie 2 php video youtube-api
首先,这不是重复的问题 StackOverflow关于YouTube API的其他答案是2013年之前,不再有效.
我必须使用PHP中的YouTube视频ID获取YouTube视频标题.
目前我这样做:
    $html = "http://www.youtube.com/watch?v=".$video_id;
    $doc = new DOMDocument();
    $doc->loadHTMLFile($html);
    $doc->preserveWhiteSpace = false;
    $title_div = $doc->getElementById('eow-title');
    $title = $title_div->nodeValue;
但是这会引发错误:
Warning: DOMDocument::loadHTMLFile(http://www.youtube.com/watch?v=hMpCsfvi_3c): failed to open stream: HTTP request failed! HTTP/1.0 429 Too Many Requests in /home/vhosts/xxxx/xxxx/get_youtube_title.php on line 6
Warning: DOMDocument::loadHTMLFile(): I/O warning : failed to load external entity "http://www.youtube.com/watch?v=hMpCsfvi_3c" in /home/vhosts/xxxx/xxxx/get_youtube_title.php on line 6
上面的方法适用于Godaddy托管,但不适用于101domain.com托管.
我尝试过的另一种方法是:
if($content=file_get_contents("http://youtube.com/get_video_info?video_id=".$video_id)) {
    parse_str($content, $ytarr);
    $myvideos[$i]['video_title']=$ytarr['title'];
}
else
$myvideos[$i]['video_title']="No title";
这会引发错误:
Warning: DOMDocument::loadHTMLFile(http://youtube.com/get_video_info?video_id=hMpCsfvi_3c): failed to open stream: HTTP request failed! HTTP/1.0 402 Payment Required in /home/vhosts/xxxx/get_youtube_title.php on line 6
Warning: DOMDocument::loadHTMLFile(): I/O warning : failed to load external entity "http://youtube.com/get_video_info?video_id=hMpCsfvi_3c" in /home/vhosts/xxxx/get_youtube_title.php on line 6
我试过的最后一个方法是:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://youtube.com/get_video_info? video_id=".$video_id);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
这不会引发任何错误,但也不起作用.错误报告是E_ALL和display_errors设置为1.
有人告诉我使用YouTube API更安全,因为我是YouTube API新手,我需要一些帮助.
你能否说明如何在PHP中获得带有视频ID的视频标题?也是一个易于理解的YouTube API教程.
我得到了它,file_get_contents()但这次我使用了不同的URL.
我使用的URL是:
https://www.googleapis.com/youtube/v3/videos?id='.$video_id.'&key='.$YoutubeAPIKey.'&part=snippet
例如:
function get_youtube_title($video_id){
    $html = 'https://www.googleapis.com/youtube/v3/videos?id='.$video_id.'&key=alskdfhwueoriwaksjdfnzxcvxzfserwesfasdfs&part=snippet';
    $response = file_get_contents($html);
    $decoded = json_decode($response, true);
    foreach ($decoded['items'] as $items) {
         $title= $items['snippet']['title'];
         return $title;
    }
}
echo $title = get_youtube_title('PQqudiUdGuo');
小智 6
这是我创建的一行代码:
echo explode('</title>', explode('<title>', file_get_contents("https://www.youtube.com/watch?v=VideoIDHERE"))[1])[0];
小智 5
使用 YouTube API v3 和 list 方法,将 ID 作为参数发送,您将获得有关该特定视频的信息,https://developers.google.com/youtube/v3/docs/videos/list#id。
带有 id 参数
Run Code Online (Sandbox Code Playgroud)string
id 参数指定要检索的资源的 YouTube 视频 ID 的逗号分隔列表。在视频资源中,id 属性指定视频的 ID。
在您的情况下,使用 PHP SDK,示例将类似于:
# Call the videos.list method to retrieve location details for each video.
$videosResponse = $youtube->videos->listVideos('snippet, recordingDetails', array(
'id' => $videoIds,
));
这对我有用:
$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;
var_dump($title);
exit;
这也有效(与您的第一种方法基本相同):
$url = "http://www.youtube.com/watch?v=" . $video_id;
$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;
$doc->loadHTMLFile($url);
$title_div = $doc->getElementById('eow-title');
$title = $title_div->nodeValue;
var_dump($title);
exit;
所以我认为你的问题与你的代码以外的其他东西有关。
function get_youtube($url){
    $youtube = "http://www.youtube.com/oembed?url=" . $url . "&format=json";
    $curl = curl_init($youtube);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $return = curl_exec($curl);
    curl_close($curl);
    return json_decode($return, true);
}
$url = // YouTube video URL
// Display Data
print_r(get_youtube($url));
| 归档时间: | 
 | 
| 查看次数: | 15236 次 | 
| 最近记录: |