To-Slalom

PraseYoutubeUrl

Jan 11th, 2017
180
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. # http://blog.luutaa.com/extract-youtube-and-vimeo-video-id-from-link/
  4. # https://github.com/eyecatchup/php-yt_downloader/blob/master/youtube-dl.class.php#L259
  5. # https://gist.github.com/ghalusa/6c7f3a00fd2383e5ef33
  6. # https://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match
  7. # https://hotexamples.com/examples/-/-/parse_yturl/php-parse_yturl-function-examples.html
  8. # https://stackoverflow.com/questions/18922728/meaning-of-youtube-nocookie-and-rel-0-in-the-iframe-embed-code
  9.  
  10. $regex = '#^(?:https?://)?(?:www\\.)?(?:youtu\\.be/|youtube\\.com(?:/embed/|/v/|/watch\\?v=|/watch\\?.+&v=))([\\w-]{11})(?:.+)?$#x';
  11. $regex = '%(?:youtube(?:-nocookie)?\.com/(?:[\w\-?&!#=,;]+/[\w\-?&!#=/,;]+/|(?:v|e(?:mbed)?)/|[\w\-?&!#=,;]*[?&]v=)|youtu\.be/)([\w-]{11})(?:[^\w-]|\Z)%i' ;
  12. $regex = '%(?:m\.|)(?:yout.*)(?:[^\/]+\/|.*[?&]v=)([^"&?\/]{11})%i' ;
  13.  
  14. function parse_yturl ( $url ) {
  15.     $pattern  = '~';
  16.     $pattern .= '(?:https?:\/\/|)';                         # Optional scheme. Either http or https + ://
  17.    #$pattern .= '(?::\/\/|)';                              # Optional scheme.
  18.    #$pattern .= '(?:www.|)';                               # Optional scheme. www.
  19.    $pattern .=     '(' ; # start array[1]
  20.    $pattern .=         '(?:' ;
  21.     $pattern .=             'www\.|m\.|';                   #  Optional www subdomain.
  22.    $pattern .=         ')' ;
  23.     $pattern .=         '(?:';                              # Group host alternatives
  24.    #$pattern .=            'youtu\.be\/';                  # Either youtu.be
  25.    #$pattern .=            '|youtube\.com';                # youtube.com
  26.    $pattern .=             '[^/]+';
  27.     $pattern .=         ')'     ;
  28.     $pattern .=     ')' ; # end   array[1] domain
  29.    $pattern .=     '(' ; # start array[2] anchor
  30.    
  31.     /*
  32.     $pattern .= '(?:/.+\#.+/|\/.*[?&]v=)';
  33.     */
  34.     $pattern .=         '(?:' ;
  35.     #$pattern .=             '\/embed\/';                    # /embed
  36.    #$pattern .=             '|\/v\/';                       # or /v
  37.    $pattern .=             '|\/.+\/';                      # or /vi
  38.    #$pattern .=            '|\/watch\?v=';                 # /watch?v=
  39.    $pattern .=             '|\/.*[?&]v=';                  # or /watch?v=,
  40.    $pattern .=             '|\/.*\?.+&v=';
  41.     #$pattern .=            '|\/ytscreeningroom\?v=';       # /ytscreeningroom?v=
  42.    #$pattern .=             '|\/feeds\/api\/videos\/';      # or either /feeds or /api or /videos
  43.    #$pattern .=             '|\/user';                      # or /user
  44.    $pattern .=             '\S*';                          # Allow anything upto “youtube VIDEO_ID”                (Note: 1a)
  45.    $pattern .=             '[^\w\-\s]';                    # but char before “youtube VIDEO_ID” is non-id char     (Note: 2a)
  46.    $pattern .=             '|\S*';                         # or Allow anything upto “youtube VIDEO_ID”             (Note: 1b)
  47.    $pattern .=             '[^\w\-\s]';                    # but char before “youtube VIDEO_ID” is non-id char     (Note: 2b)
  48.    /*
  49.     */
  50.     $pattern .=         ')';                                # End group path alternatives
  51.    $pattern .=     ')'; # end array[2]
  52.  
  53.     $pattern .= '([\w\-]{11})';                             # “youtube VIDEO_ID” is exactly 11 chars # array[3]
  54.    #$pattern .= '([\w\-]{12,})';                           # “youtube PLAYLIST_ID” is exactly 12 or more chars
  55.    #$pattern .= '([a-z0-9;:@?&%=+\/\$_.-]*)';              # Strip out anything left in the url
  56.    $pattern .= '(.*)';                                     # Strip out anything left in the url
  57.    $pattern .= '~i';
  58.  
  59.     preg_match ( $pattern , $url , $matches ) ;
  60.     return ( count ( $matches ) > 0 ) ? $matches : $url ;
  61.     return (isset($matches[1])) ? $matches[1] : $url ;
  62.     return (isset($matches[1])) ? $matches[1] : FALSE ;
  63. }
  64.  
  65.  
  66. # lets test it shall we ? :)
  67. $urls = array(
  68.     'https://www.youtube-nocookie.com/embed/kk5xfK0ovrk',
  69.     'http://www.youtube.com/?feature=player_embedded&v=4heZkvPcd1M',
  70.     'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=c4-overview-vl&list=PLbzoR-pLrL6qucl8-lOnzvhFc2UM1tcZA',
  71.     'https://www.youtube.com/watch?v=4heZkvPcd1M&list=RDFZu097wb8wUx',
  72.     'http://www.youtube.com/watch?feature=player_embedded&v=4heZkvPcd1M',
  73.     'http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/4heZkvPcd1M',
  74.     'http://www.youtube.com/embed/4heZkvPcd1M',
  75.     'http://www.youtube.com/user/username#p/u/11/4heZkvPcd1M',
  76.     'http://youtube.com/vi/4heZkvPcd1M?feature=youtube_gdata_player',
  77.     'http://www.youtube.com/v/4heZkvPcd1M',
  78.     'http://www.youtube.com/e/4heZkvPcd1M',
  79.     'http://www.youtube.com/p/4heZkvPcd1M',
  80.     'http://www.youtube.com/?v=4heZkvPcd1M',
  81.     'youtu.be/watch?v=4heZkvPcd1M',
  82.     'youtube.com/watch?v=4heZkvPcd1M',
  83.     'm.youtu.be/watch?v=4heZkvPcd1M',
  84.     'm.youtube.com/watch?v=4heZkvPcd1M',
  85.     'http://www.youtube.com/watch?v=4heZkvPcd1M',
  86.     'http://www.m.youtube.com/watch?v=4heZkvPcd1M',
  87.     'http://www.m.youtu.be/watch?v=4heZkvPcd1M',
  88.     'http://youtu.be/4heZkvPcd1M',
  89.     'https://youtu.be/4heZkvPcd1M',
  90.     'youtu.be/watch?v=4heZkvPcd1M',
  91.     'youtube.com/watch?v=4heZkvPcd1M',
  92.     'https://youtu.be/4heZkvPcd1M',
  93.     'https://www.youtube.com/embed/4heZkvPcd1M',
  94.     'https://www.m.youtube.com/embed/4heZkvPcd1M',
  95.     'http://youtu.be/4heZkvPcd1M',
  96.     'http://www.youtube.com/embed/4heZkvPcd1M',
  97.     'http://www.youtube.com/watch?v=4heZkvPcd1M',
  98.     'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=g-vrec',
  99.     'http://www.youtube.com/watch?v=4heZkvPcd1M&feature=player_embedded',
  100.     'http://www.youtube.com/v/4heZkvPcd1M?fs=1&hl=en_US',
  101.     'http://www.youtube.com/ytscreeningroom?v=4heZkvPcd1M',
  102.     'http://www.youtube.com/watch?NR=1&feature=endscreen&v=4heZkvPcd1M',
  103.     'https://m.youtu.be/4heZkvPcd1M',
  104. );
  105.  
  106. echo count ( $urls ). "\n";
  107. foreach ( $urls as $url ) {
  108.     var_dump ( parse_yturl ( $url ) ). "\n" ;
  109. }
RAW Paste Data