2012-05-01 31 views
0

私はサイト上でいくつかの異なる例を見ましたが、すべてのYouTubeオプションからIDを取得しません...例として、次のリンクは下の正規表現パターン。どんな助けも素晴らしいだろう。事前のおかげで: http://www.youtube.com/watch?v=hLSoU53DXK8&feature=g-vrecURL正規表現のパターンからYouTube IDを取得

私の正規表現はデータベースとしてでそれを置く:

ちょうど、ユーザーがユーチューブのホームページに行くと、彼らはこのURLを与えるが分割動画の1をクリックした場合は、この1のようです: hLSoU53DXK8-vrecと-vrecなしで必要です。

// YOUTUBE 
$youtube = $_POST['youtube']; 


function getYoutubeId($youtube) { 
    $url = parse_url($youtube); 
    if($url['host'] !== 'youtube.com' && 
      $url['host'] !== 'www.youtube.com'&& 
      $url['host'] !== 'youtu.be'&& 
      $url['host'] !== 'www.youtu.be') 
     return false; 
    $youtube = preg_replace('~ 
     # Match non-linked youtube URL in the wild. (Rev:20111012) 
     https?://   # Required scheme. Either http or https. 
     (?:[0-9A-Z-]+\.)? # Optional subdomain. 
     (?:    # Group host alternatives. 
      youtu\.be/  # Either youtu.be, 
     | youtube\.com # or youtube.com followed by 
      \S*    # Allow anything up to VIDEO_ID, 
      [^\w\-\s]  # but char before ID is non-ID char. 
     )     # End host alternatives. 
     ([\w\-]{11})  # $1: VIDEO_ID is exactly 11 chars. 
     (?=[^\w\-]|$)  # Assert next char is non-ID or EOS. 
     (?!    # Assert URL is not pre-linked. 
      [?=&+%\w]*  # Allow URL (query) remainder. 
      (?:    # Group pre-linked alternatives. 
      [\'"][^<>]*> # Either inside a start tag, 
      | </a>   # or inside <a> element text contents. 
     )    # End recognized pre-linked alts. 
     )     # End negative lookahead assertion. 
     [?=&+%\w]*  # Consume any URL (query) remainder. 
     ~ix', 
     '$1', 
     $youtube); 
    return $youtube; 
} 

$youtube_id = getYoutubeId($youtube); 
+0

なぜあなたは、手動でURLを解析しようとするのでしょうか? – aquinas

+0

[PHP Regexでyoutube video IDを取得するのは可能でしょうか?](0120-998-002) –

答えて

14
$url = "http://www.youtube.com/watch?v=hLSoU53DXK8&feature=g-vrec"; 
$query_string = array(); 

parse_str(parse_url($url, PHP_URL_QUERY), $query_string); 

$id = $query_string["v"]; 
+1

2つの問題を解決するための私の+1。 ;) – aquinas

+0

+1既存のホイールの再利用。 –

+0

素敵な作品は完璧です...シンプルさのようなものは確かにハハ – Wakenn

0
$youtube = "theURL"; 
$query_string = array(); 

parse_str(parse_url($youtube, PHP_URL_QUERY), $query_string); 

$youtube_id = $query_string["v"]; 
3

Unfortuneately上記の溶液は、短いURLに対して "http://youtu.beを" YouTubeのIDを取得しません。だから私は上記の解決策に基づいて、この機能を書いた:PHPに組み込まれた場合でもparse_urlという関数がある場合に

function get_youtube_id($youtube_url) { 
    $url = parse_url($youtube_url); 

    if($url['host'] !== 'youtube.com' && 
     $url['host'] !== 'www.youtube.com'&& 
     $url['host'] !== 'youtu.be'&& 
     $url['host'] !== 'www.youtu.be') 
    return ''; 

    if($url['host'] === 'youtube.com' || $url['host'] === 'www.youtube.com') : 
     parse_str(parse_url($youtube_url, PHP_URL_QUERY), $query_string); 
     return $query_string["v"]; 
    endif; 

    $youtube_id = substr($url['path'], 1); 
    if(strpos($youtube_id, '/')) 
     $youtube_id = substr($youtube_id, 0, strpos($youtube_id, '/')); 

    return $youtube_id; 

}

関連する問題