Holen Sie sich die YouTube-Video-ID von der URL mit PHP

Lesezeit: 4 Minuten

Holen Sie sich die YouTube Video ID von der URL mit PHP
Matt

Ich versuche, eine Funktion zu erstellen, die einen Wert aus einem benutzerdefinierten WordPress-Feld (“_videourl” für eine YouTube-Video-URL) aufruft und dann PHP-Trim verwendet, um ihn auf die YouTube-Video-ID zu reduzieren. Ich habe eine Javascript-Funktion gefunden, die URLs nur auf die ID reduziert, aber ich habe keine Ahnung, wie ich das in PHP übersetzen könnte (Funktion unten):

     function youtubeIDextract(url) 
     { 
     var youtube_id; 
     youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1"); 
     return youtube_id; 
     }

Diese PHP-Funktion würde innerhalb der Schleife verwendet, also ich Überlegen Ich müsste Variablen verwenden, aber ich bin wirklich nur ein Noob, also habe ich keine Ahnung, was ich tun soll. Kann mir jemand helfen, indem er sein Programmier-Know-how bei der Erstellung einer PHP-Funktion teilt?

EDIT:GELÖST

Nach einigem Probieren fand ich eine Lösung. Ich wollte es zurückgeben und posten, damit auch andere Bedürftige einen Ausgangspunkt haben.

function getYoutubeId($ytURL) 
    {
        $urlData = parse_url($ytURL);
        //echo '<br>'.$urlData["host"].'<br>';
        if($urlData["host"] == 'www.youtube.com') // Check for valid youtube url
        {
            $ytvIDlen = 11; // This is the length of YouTube's video IDs

            // The ID string starts after "v=", which is usually right after 
            // "youtube.com/watch?" in the URL
            $idStarts = strpos($ytURL, "?v=");

            // In case the "v=" is NOT right after the "?" (not likely, but I like to keep my 
            // bases covered), it will be after an "&":
            if($idStarts === FALSE)
                $idStarts = strpos($ytURL, "&v=");
            // If still FALSE, URL doesn't have a vid ID
            if($idStarts === FALSE)
                die("YouTube video ID not found. Please double-check your URL.");

            // Offset the start location to match the beginning of the ID string
            $idStarts +=3;

            // Get the ID string and return it
            $ytvID = substr($ytURL, $idStarts, $ytvIDlen);

            return $ytvID;
        }
        else
        {
            //echo 'This is not a valid youtube video url. Please, give a valid url...';
            return 0;
        }

    } 

  • Löst dies Ihr Problem: stackoverflow.com/questions/2936467/… ?

    – Peter Boughton

    28. August 2011 um 14:23 Uhr

  • Ich bezweifle stark, dass YouTube-Video-IDs immer 11 Zeichen lang sind. Ihre Regex kann falsch sein.

    – MartinodF

    28. August 2011 um 14:23 Uhr

  • Ich habe einige hilfreiche Tipps im Link Peter gefunden, aber es scheint, dass keine Lösungen die zusätzlichen Argumente am Ende herausfiltern konnten (was ich auch brauche). Ich habe etwas recherchiert und das hier gefunden: halgatewood.com/php-get-the-youtube-video-id-from-a-youtube-url aber ich bin mir nicht sicher, wie ich es ändern soll, um den benutzerdefinierten Feldwert für das Feld „_videoembed“ zu erhalten.

    – Matt

    28. August 2011 um 17:29 Uhr


  • @MartinodF- Tatsächlich sind sie genau 11 Zeichen lang.

    – Benjam

    9. September 2011 um 2:05 Uhr

  • mögliches Duplikat von YouTube-ID aus URL-Regex-Muster abrufen

    – T. Todua

    10. Juli 2014 um 16:41 Uhr

Ich musste mich damit für eine PHP-Klasse auseinandersetzen, die ich vor ein paar Wochen geschrieben habe, und endete mit einer Regex, die mit allen Arten von Strings übereinstimmt: Mit oder ohne URL-Schema, mit oder ohne Subdomain, youtube.com-URL-Strings, youtu.be-URL Zeichenfolgen und der Umgang mit allen Arten von Parametersortierungen. Sie können es überprüfen bei GitHub oder kopieren Sie einfach den folgenden Codeblock und fügen Sie ihn ein:

/**
 *  Check if input string is a valid YouTube URL
 *  and try to extract the YouTube Video ID from it.
 *  @author  Stephan Schmitz <[email protected]>
 *  @param   $url   string   The string that shall be checked.
 *  @return  mixed           Returns YouTube Video ID, or (boolean) false.
 */        
function parse_yturl($url) 
{
    $pattern = '#^(?:https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=|/watch\?.+&v=))([\w-]{11})(?:.+)?$#x';
    preg_match($pattern, $url, $matches);
    return (isset($matches[1])) ? $matches[1] : false;
}

Um die Regex zu erklären, hier ist eine verschüttete Version:

/**
 *  Check if input string is a valid YouTube URL
 *  and try to extract the YouTube Video ID from it.
 *  @author  Stephan Schmitz <[email protected]>
 *  @param   $url   string   The string that shall be checked.
 *  @return  mixed           Returns YouTube Video ID, or (boolean) false.
 */        
function parse_yturl($url) 
{
    $pattern = '#^(?:https?://)?';    # Optional URL scheme. Either http or https.
    $pattern .= '(?:www\.)?';         #  Optional www subdomain.
    $pattern .= '(?:';                #  Group host alternatives:
    $pattern .=   'youtu\.be/';       #    Either youtu.be,
    $pattern .=   '|youtube\.com';    #    or youtube.com
    $pattern .=   '(?:';              #    Group path alternatives:
    $pattern .=     '/embed/';        #      Either /embed/,
    $pattern .=     '|/v/';           #      or /v/,
    $pattern .=     '|/watch\?v=';    #      or /watch?v=,    
    $pattern .=     '|/watch\?.+&v='; #      or /watch?other_param&v=
    $pattern .=   ')';                #    End path alternatives.
    $pattern .= ')';                  #  End host alternatives.
    $pattern .= '([\w-]{11})';        # 11 characters (Length of Youtube video ids).
    $pattern .= '(?:.+)?$#x';         # Optional other ending URL parameters.
    preg_match($pattern, $url, $matches);
    return (isset($matches[1])) ? $matches[1] : false;
}

  • Ich kann bestätigen, dass dies bei mir funktioniert hat. Super Lösung und Erklärung!

    – Michael J. Calkins

    27. Februar 2013 um 19:46 Uhr


Unter der Annahme, dass die Regex korrekt ist, könnten Sie verwenden preg_replace

$youtubeId = preg_replace('/^[^v]+v.(.{11}).*/', '$1', $url);

Das könnte Sie auch interessieren str_replace oder substr als Alternativen.

Beste Lösung, die ich gefunden habe;

 function GetYouTubeId($url)
 {
 preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
 $youtube_id = $match[1];
 return $youtube_id;
 }

923540cookie-checkHolen Sie sich die YouTube-Video-ID von der URL mit PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy