2012-05-14 121 views
9

Tôi đang cố gắng kiểm tra xem url có phải là URL video hợp lệ trên youtube và nhận ID video youtube từ đó hay không, cho đến nay tôi đang sử dụng chức năng chia tách javascript đơn giản để đạt được điều này, tuy nhiên điều này có một số nhược điểm nhỏ như youtube có nhiều URL.cách lấy id video youtube từ url

Tôi đã xem các luồng ngăn xếp luồng khác tuy nhiên tất cả chúng chỉ hỗ trợ 1 URL cụ thể không phải là những gì tôi cần.

tôi cần một cái gì đó phù hợp với tất cả các URL của:

http (s): //www.youtu.be/videoID

http (s): //www.youtube.com/ xem? v = videoid

(và tùy chọn bất kỳ URL ngắn khác mà kịch bản tự động phát hiện cho dù đó có chứa một youtube video)

Bất kỳ ý tưởng có thể được xử lý bởi các b rowser nhanh/hiệu quả được đánh giá cao!

+0

sửa câu hỏi của tôi, tôi cũng cần phải kiểm tra hay không URL là một giá trị youtube video – xorinzor

+0

thể bản sao của [Javascript REGEX: Cách lấy id video youtube từ URL?] (http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url) – HackedByChinese

+0

Tôi sử dụng các chức năng đó: https://github.com/lingtalfi/video-ids-and-thumbnails/blob/master/function.video.php#L41 – ling

Trả lời

39

Hãy thử điều này:

var url = "..."; 
var videoid = url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/); 
if(videoid != null) { 
    console.log("video id = ",videoid[1]); 
} else { 
    console.log("The youtube url is not valid."); 
} 

thấy regex:

/ 
(?:https?:\/{2})? // Optional protocol, if have, must be http:// or https:// 
(?:w{3}\.)?  // Optional sub-domain, if have, must be www. 
youtu(?:be)? // The domain. Match 'youtu' and optionally 'be'. 
\.(?:com|be) // the domain-extension must be .com or .be 
(?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in querystring from 'watch' directory OR after root directory, any non-space value. 
/
+0

url ngắn url là youtu.be regex trông như thế nào trong trường hợp đó? – xorinzor

+2

@xorinzor: Kiểm tra cập nhật. –

+2

@xorinzor: Tôi đã thêm một giải thích regex đơn giản. –

8

Có lẽ bạn nên nhìn vào các API Youtube và cố gắng để xem nếu có một cách để có được một videoid bằng cách phân tích các URL mặc dù API.

Nhìn này SO bài: Youtube API - Extract video ID

+0

thực sự những gì tôi muốn, tuy nhiên The Mask là lần đầu tiên, tôi đã đánh dấu phản hồi của mình là câu trả lời – xorinzor

+0

+1 để chỉ ra câu hỏi hiện tại và API được cung cấp bởi trang web được đề cập. –

5

Điều này có thể nhanh chóng:

var url = 'http://www.youtu.be/543221'; 
     //http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also 
var a = url.split("v=")[1]; 
a = a != undefined ? a : url.split("youtu.be/")[1]; 
b = a.split("&")[0]; 

biến c sẽ có id của bạn. Nhanh chóng. Regex đẹp hơn ... khó đọc hơn. Tôi đã sửa đổi mã của mình thành tài khoản cho cả hai.

+0

Đây chính xác là những gì các chủ đề khác cũng có, tuy nhiên tôi cần URL của youtu.be để được xác thực quá – xorinzor

+0

Vui lòng kiểm tra mã của tôi ngay bây giờ. Một dòng mã khác đủ đơn giản để kiểm tra những gì bạn đang tìm kiếm. Tôi nghĩ rằng nó vẫn còn dễ đọc hơn so với regex. Tuy nhiên, tôi đồng ý rằng regex là đẹp hơn. Tuy nhiên, vì rất nhiều người không nói regex, cách này có thể làm cho nó dễ dàng hơn để cập nhật thời gian tới youtube thêm một định dạng url khác. Chỉ là một ý nghĩ. – frosty

0

bạn có thể làm điều đó dễ dàng bằng cách sử dụng preg_match ở đây là ví dụ:
$url = "http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec"; preg_match('/v=([0-9a-zA-Z]+)/', $url, $matches); $vid = $matches[1];
Bây giờ bạn sẽ có id video là: $ vid = YzOt12co4nk;

+0

bất chấp câu hỏi đã được trả lời, xin lưu ý đây là về giải pháp Javascript/JQuery, không phải PHP; cảm ơn bạn vì sự đóng góp mặc dù. – xorinzor

2

Có quá nhiều loại:

  • dạng ngắn mới nhất: http://youtu.be/NLqAF9hrVbY
  • iframe: http://www.youtube.com/embed/NLqAF9hrVbY
  • iframe (bảo đảm): https://www.youtube.com/embed/NLqAF9hrVbY
  • đối tượng param: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • đối tượng nhúng: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • xem: http://www.youtube.com/watch?v=NLqAF9hrVbY
  • người dùng: http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
  • ytscreeningroom: http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
  • bất kỳ/điều/đi!: http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
  • bất kỳ/subdomain/quá: http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
  • hơn params: http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
  • truy vấn có thể có dấu chấm: http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be (Nguồn: How do I find all YouTube video ids in a string using a regex?)

Cách tốt nhất là hạn chế đầu vào dữ liệu.

Chúc may mắn

+0

Giải pháp này hoạt động với tất cả các url của bạn http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url/4811367#14701040 – ptguy

2

thử mã này

var url = "..."; 
var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})); 
if(videoid != null) { 
    console.log("video id = ",videoid[1]); 
} else { 
    console.log("The youtube url is not valid."); 
} 

Các Regex là từ YouTube video ID regex

Các vấn đề liên quan