Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- # http://blog.luutaa.com/extract-youtube-and-vimeo-video-id-from-link/
- # https://github.com/eyecatchup/php-yt_downloader/blob/master/youtube-dl.class.php#L259
- # https://gist.github.com/ghalusa/6c7f3a00fd2383e5ef33
- # https://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match
- # https://hotexamples.com/examples/-/-/parse_yturl/php-parse_yturl-function-examples.html
- # https://stackoverflow.com/questions/18922728/meaning-of-youtube-nocookie-and-rel-0-in-the-iframe-embed-code
- $regex = '#^(?:https?://)?(?:www\\.)?(?:youtu\\.be/|youtube\\.com(?:/embed/|/v/|/watch\\?v=|/watch\\?.+&v=))([\\w-]{11})(?:.+)?$#x';
- $regex = '%(?:youtube(?:-nocookie)?\.com/(?:[\w\-?&!#=,;]+/[\w\-?&!#=/,;]+/|(?:v|e(?:mbed)?)/|[\w\-?&!#=,;]*[?&]v=)|youtu\.be/)([\w-]{11})(?:[^\w-]|\Z)%i' ;
- $regex = '%(?:m\.|)(?:yout.*)(?:[^\/]+\/|.*[?&]v=)([^"&?\/]{11})%i' ;
- function parse_yturl ( $url ) {
- $pattern = '~';
- $pattern .= '(?:https?:\/\/|)'; # Optional scheme. Either http or https + ://
- #$pattern .= '(?::\/\/|)'; # Optional scheme.
- #$pattern .= '(?:www.|)'; # Optional scheme. www.
- $pattern .= '(' ; # start array[1]
- $pattern .= '(?:' ;
- $pattern .= 'www\.|m\.|'; # Optional www subdomain.
- $pattern .= ')' ;
- $pattern .= '(?:'; # Group host alternatives
- #$pattern .= 'youtu\.be\/'; # Either youtu.be
- #$pattern .= '|youtube\.com'; # youtube.com
- $pattern .= '[^/]+';
- $pattern .= ')' ;
- $pattern .= ')' ; # end array[1] domain
- $pattern .= '(' ; # start array[2] anchor
- /*
- $pattern .= '(?:/.+\#.+/|\/.*[?&]v=)';
- */
- $pattern .= '(?:' ;
- #$pattern .= '\/embed\/'; # /embed
- #$pattern .= '|\/v\/'; # or /v
- $pattern .= '|\/.+\/'; # or /vi
- #$pattern .= '|\/watch\?v='; # /watch?v=
- $pattern .= '|\/.*[?&]v='; # or /watch?v=,
- $pattern .= '|\/.*\?.+&v=';
- #$pattern .= '|\/ytscreeningroom\?v='; # /ytscreeningroom?v=
- #$pattern .= '|\/feeds\/api\/videos\/'; # or either /feeds or /api or /videos
- #$pattern .= '|\/user'; # or /user
- $pattern .= '\S*'; # Allow anything upto “youtube VIDEO_ID” (Note: 1a)
- $pattern .= '[^\w\-\s]'; # but char before “youtube VIDEO_ID” is non-id char (Note: 2a)
- $pattern .= '|\S*'; # or Allow anything upto “youtube VIDEO_ID” (Note: 1b)
- $pattern .= '[^\w\-\s]'; # but char before “youtube VIDEO_ID” is non-id char (Note: 2b)
- /*
- */
- $pattern .= ')'; # End group path alternatives
- $pattern .= ')'; # end array[2]
- $pattern .= '([\w\-]{11})'; # “youtube VIDEO_ID” is exactly 11 chars # array[3]
- #$pattern .= '([\w\-]{12,})'; # “youtube PLAYLIST_ID” is exactly 12 or more chars
- #$pattern .= '([a-z0-9;:@?&%=+\/\$_.-]*)'; # Strip out anything left in the url
- $pattern .= '(.*)'; # Strip out anything left in the url
- $pattern .= '~i';
- preg_match ( $pattern , $url , $matches ) ;
- return ( count ( $matches ) > 0 ) ? $matches : $url ;
- return (isset($matches[1])) ? $matches[1] : $url ;
- return (isset($matches[1])) ? $matches[1] : FALSE ;
- }
- # lets test it shall we ? :)
- $urls = array(
- 'https://www.youtube-nocookie.com/embed/kk5xfK0ovrk',
- 'http://www.youtube.com/?feature=player_embedded&v=4heZkvPcd1M',
- 'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=c4-overview-vl&list=PLbzoR-pLrL6qucl8-lOnzvhFc2UM1tcZA',
- 'https://www.youtube.com/watch?v=4heZkvPcd1M&list=RDFZu097wb8wUx',
- 'http://www.youtube.com/watch?feature=player_embedded&v=4heZkvPcd1M',
- 'http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/4heZkvPcd1M',
- 'http://www.youtube.com/embed/4heZkvPcd1M',
- 'http://www.youtube.com/user/username#p/u/11/4heZkvPcd1M',
- 'http://youtube.com/vi/4heZkvPcd1M?feature=youtube_gdata_player',
- 'http://www.youtube.com/v/4heZkvPcd1M',
- 'http://www.youtube.com/e/4heZkvPcd1M',
- 'http://www.youtube.com/p/4heZkvPcd1M',
- 'http://www.youtube.com/?v=4heZkvPcd1M',
- 'youtu.be/watch?v=4heZkvPcd1M',
- 'youtube.com/watch?v=4heZkvPcd1M',
- 'm.youtu.be/watch?v=4heZkvPcd1M',
- 'm.youtube.com/watch?v=4heZkvPcd1M',
- 'http://www.youtube.com/watch?v=4heZkvPcd1M',
- 'http://www.m.youtube.com/watch?v=4heZkvPcd1M',
- 'http://www.m.youtu.be/watch?v=4heZkvPcd1M',
- 'http://youtu.be/4heZkvPcd1M',
- 'https://youtu.be/4heZkvPcd1M',
- 'youtu.be/watch?v=4heZkvPcd1M',
- 'youtube.com/watch?v=4heZkvPcd1M',
- 'https://youtu.be/4heZkvPcd1M',
- 'https://www.youtube.com/embed/4heZkvPcd1M',
- 'https://www.m.youtube.com/embed/4heZkvPcd1M',
- 'http://youtu.be/4heZkvPcd1M',
- 'http://www.youtube.com/embed/4heZkvPcd1M',
- 'http://www.youtube.com/watch?v=4heZkvPcd1M',
- 'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=g-vrec',
- 'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=player_embedded',
- 'http://www.youtube.com/v/4heZkvPcd1M?fs=1&hl=en_US',
- 'http://www.youtube.com/ytscreeningroom?v=4heZkvPcd1M',
- 'http://www.youtube.com/watch?NR=1&feature=endscreen&v=4heZkvPcd1M',
- 'https://m.youtu.be/4heZkvPcd1M',
- );
- echo count ( $urls ). "\n";
- foreach ( $urls as $url ) {
- var_dump ( parse_yturl ( $url ) ). "\n" ;
- }
Advertisement
Add Comment
Please, Sign In to add comment