2012-10-08 81 views
0

我都試過,但它的失敗:YouTube鏈接不給視頻ID

$whereIsMyCake = ''; 

// 
// put all the links here 
// 
$url = "http://www.youtube.com/embed/more_yougooglelink"; 

$url = "http://www.youtube.com/v/..." // works 
$url = "http://www.youtube.com/watch?v=ue1mLnyEd90"; // WORKS 
$url = "http://youtu.be/we_youGoogle_u"; // WORKS 


parse_str(parse_url($url, PHP_URL_QUERY), $my_array_of_vars); 
if($my_array_of_vars['v']=='') { 
    preg_match(
    "#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", 
    $url, 
    $matches); 

    $whereIsMyCake = $matches[0]; 
} else { 
    $whereIsMyCake = $my_array_of_vars['v']; 
} 

echo $whereIsMyCake; 

問:現在看來youtube.com/embed/videoid is here不工作,如果YouTube對,我們必須不斷地改變我們的算法,新的聯繫是什麼? for youtube.com/embed/embed.weareruling/embed/embed/googleisboss/findmenow/video id is here ?

+0

「Gimme teh codes」...你到目前爲止試過了什麼?因爲簡單的'strstr'和'substr'應該給你正確的結果很快,問題是什麼? – Vyktor

回答

2

您可以使用更完整的正則表達式,如本答覆中所述:https://stackoverflow.com/a/6556662/921739。該答案還提到了YouTube的Oembed服務,您可能會發現它很有用。

此外,您可以使用YouTube API https://developers.google.com/youtube/2.0/developers_guide_php。這樣,如果格式改變,你仍然是金。

爲了減輕您對YouTube網址更改的擔憂:請考慮所有鏈接到YouTube視頻的博客,網站和電子郵件。如果URL格式在不支持舊格式的情況下發生變化,則所有這些鏈接都會被破壞。 Google有很好的理由不經常更改他們的網址。 (這並不是說,他們不會...)


編輯

使用代碼從SO鏈接我提供,該ID是從所有你所需要的格式的URL拉:

function youtube_id_from_url($url) { 
    $pattern = 
     '%^# Match any youtube URL 
     (?:https?://)? # Optional scheme. Either http or https 
     (?:www\.)?  # Optional www subdomain 
     (?:    # Group host alternatives 
      youtu\.be/ # Either youtu.be, 
     | youtube\.com # or youtube.com 
      (?:   # Group path alternatives 
      /embed/  # Either /embed/ 
      | /v/   # or /v/ 
      | /watch\?v= # or /watch\?v= 
     )    # End path alternatives. 
     )    # End host alternatives. 
     ([\w-]{10,12}) # Allow 10-12 for 11 char youtube id. 
     $%x' 
     ; 
    $result = preg_match($pattern, $url, $matches); 
    if (false !== $result) { 
     return $matches[1]; 
    } 
    return false; 
} 

$urls[] = "http://www.youtube.com/embed/ue1mLnyEd90"; 
$urls[] = "http://www.youtube.com/v/ue1mLnyEd90"; 
$urls[] = "http://www.youtube.com/watch?v=ue1mLnyEd90"; 
$urls[] = "http://youtu.be/ue1mLnyEd90"; 

foreach ($urls as $url) { 
    assert(youtube_id_from_url($url) === 'ue1mLnyEd90'); # Passes 
} 
+0

謝謝,我很困惑要採取哪個方向,我想我會用python來做,但是你的邏輯很好,謝謝。 – YumYumYum