Skip to content

Instantly share code, notes, and snippets.

@imelgrat
Last active April 27, 2018 05:27
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save imelgrat/6131a2cad53c3e4fd3af29284d06a8e4 to your computer and use it in GitHub Desktop.
Save imelgrat/6131a2cad53c3e4fd3af29284d06a8e4 to your computer and use it in GitHub Desktop.
Verify whether a YouTube video exists using PHP and oEmbed status codes. Instead of actually fetching the video’s URL using a tool suchas a cURL, we can speed things up by just checking the response headers by using PHP’s get_headers() function. Full article: https://imelgrat.me/json-xml/oembed-protocol-embed-videos-news/
<?php
/**
* @author Ivan Melgrati
* @copyright 2018
*/
function YouTube_Check_ID($videoID)
{
$is_valid = true;
// YouTube oEmbed API endpoint (https://www.youtube.com/oembed)
// Query it using the video's URL as parameter
// The "format" parameter may be either JSON or XML. Not relevant for this tes.
$theURL = "http://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=$videoID&format=json";
$file_headers = @get_headers($url);
if ($file_headers === false)
{
$is_valid = false; // when server not found
}
else
{
foreach ($file_headers as $header)
{
// Parse all headers. Corrects $url when 301/302 redirect(s) lead(s) to 200:
if (preg_match("/^Location: (http.+)$/", $header, $m))
{
$url = $m[1];
}
// Use regex to detect HTTP response codes
if (preg_match("/^HTTP.+\s(\d\d\d)\s/", $header, $m))
{
$code = $m[1];
}
}
// $code 404 This must be a bad video ID.
if ($code == 404) //
{
$is_valid = false;
}
}
return $is_valid;
}
$id = 'BKorP55Aqvg'; //Video id goes here
if (YouTube_Check_ID($id))
{
echo "Yes! The video exists";
}
else
{
echo "Oh, no! The video code is wrong and it can't be found on YouTube";
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment