Heer Makwana
Heer Makwana

Reputation: 905

validate youtube URL and it should be exists

I am new to php.

I want to check the valid youtube URL and if video is exists or not.

Any suggestion would be appreciated.

Upvotes: 0

Views: 6531

Answers (4)

Paulius Jačionis
Paulius Jačionis

Reputation: 41

Here's a solution I wrote using Youtube's oembed.

The first function simply checks if video exists on Youtube's server. It assumes that video does not exists ONLY if 404 error is returned. 401 (unauthorized) means video exists, but there are some access restrictions (for example, embedding may be disabled).

Use second function if you want to check if video exists AND is embeddable.

<?php

function isValidYoutubeURL($url) {

    // Let's check the host first
    $parse = parse_url($url);
    $host = $parse['host'];
    if (!in_array($host, array('youtube.com', 'www.youtube.com'))) {
        return false;
    }

    $ch = curl_init();
    $oembedURL = 'www.youtube.com/oembed?url=' . urlencode($url).'&format=json';
    curl_setopt($ch, CURLOPT_URL, $oembedURL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // Silent CURL execution
    $output = curl_exec($ch);
    unset($output);

    $info = curl_getinfo($ch);
    curl_close($ch);

    if ($info['http_code'] !== 404)
        return true;
    else 
        return false;
}

function isEmbeddableYoutubeURL($url) {

    // Let's check the host first
    $parse = parse_url($url);
    $host = $parse['host'];
    if (!in_array($host, array('youtube.com', 'www.youtube.com'))) {
        return false;
    }

    $ch = curl_init();
    $oembedURL = 'www.youtube.com/oembed?url=' . urlencode($url).'&format=json';
    curl_setopt($ch, CURLOPT_URL, $oembedURL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($output);

    if (!$data) return false; // Either 404 or 401 (Unauthorized)
    if (!$data->{'html'}) return false; // Embeddable video MUST have 'html' provided 

    return true;
}

$url = 'http://www.youtube.com/watch?v=QH2-TGUlwu4';
echo isValidYoutubeURL($url) ? 'Valid, ': 'Not Valid, ';
echo isEmbeddableYoutubeURL($url) ? 'Embeddable ': 'Not Embeddable ';

?>

Upvotes: 4

Bob
Bob

Reputation: 49

you need change the answer above a little bit otherwise you just got the very first character,

try this

<?php
$videoUrl = 'http://www.youtube.com/watch?v=cKO6GrbdXfU&feature=g-logo';
preg_match('%https?://(?:www\.)?youtube\.com/watch\?v=([^&]+)%', $videoUrl, $matches);
var_dump($matches);
//array(2) {
//  [0]=>
//  string(42) "http://www.youtube.com/watch?v=cKO6GrbdXfU"
//  [1]=>
//  string(11) "cKO6GrbdXfU"
//}

Upvotes: 2

Stefan
Stefan

Reputation: 2068

as @ThiefMaster said,

but i'd like to add something.

he has asked how to determine if a video exists.

do a curl request and then execute curl_getinfo(...) to check the http status code.

When it is 200, the video exists, else it doesn't exist.

How that works, read here: curl_getinfo

Upvotes: 2

ThiefMaster
ThiefMaster

Reputation: 318508

You never read the preg_match docs, did you?

  • You need a delimiter. / is most common but since you deal with an URL, # is easier as it avoid some escaping.
  • You need to escape characters with a special meaning in regex such as ? or .
  • The matches are not returned (it returns the number of matches or false if it failed), so to get the matched string you need the third param of preg_match

 

preg_match('#https?://(?:www\.)?youtube\.com/watch\?v=([^&]+?)#', $videoUrl, $matches);

Upvotes: 4

Related Questions