[PHP] Tổng hợp các cách lấy Youtube Video ID

Hiện nay có rất nhiều trang web nhúng các video từ Youtube về để làm tăng sự phong phú cũng như cải thiện chất lượng nội dung các bài viết. Trong nhiều trường hợp, việc diễn giải hoặc dẫn chứng minh họa bằng video sẽ làm cho người dùng dễ hiểu hơn về vấn đề, đồng thời nâng cao sự tương tác giữa website và người dùng.

Với một lập trình viên thì việc nhúng video vào trang web khá dễ dàng vì hầu như các trang web chia sẻ video trực tuyến lớn đều có đoạn mã nhúng vào website. Nhưng vì lí do phát sinh nên đôi lúc các  lập trình viên sẽ cần phải lấy thông tin video đó. Ví dụ hiển thị hình minh họa (thumbnail), lưu thông tin video vào database…Để có được những thông tin đó thì điều kiện ban đầu là phải có được ID của video đó.

Trong bài viết hôm nay, tôi sẽ giới thiệu các bạn một số cách để lấy Youtube Video ID.

1, Lấy Video ID từ đường dẫn thông dụng của Youtube

Get Youtube Video ID

Hầu hết các đường dẫn video được chia sẻ từ Youtube sẽ có dạng như sau:

youtube.com/?v={video_id}
youtube.com/watch?v={video_id}

Các bạn chỉ cần dùng câu lệnh đơn giản dưới đây để lấy video_id

<?php
  $url = "http://www.youtube.com/watch?v=te5_bwysiWA";
  parse_str(parse_url($url, PHP_URL_QUERY), $youtube);
  echo $youtube['v'];
?>

2, Lấy Video ID từ các đường dẫn khác nhau của Youtube

Get Youtube Video ID

Đôi khi các bạn sẽ gặp những đường dẫn khác nhau của Youtube dưới đây

http://youtu.be/dQw4w9WgXcQ ...
http://www.youtube.com/embed/dQw4w9WgXcQ ...
http://www.youtube.com/watch?v=dQw4w9WgXcQ ...
http://www.youtube.com/?v=dQw4w9WgXcQ ...
http://www.youtube.com/v/dQw4w9WgXcQ ...
http://www.youtube.com/e/dQw4w9WgXcQ ...
http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ ...
http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ ...
http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ ...
http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ ...

Lúc đó các bạn có thể tham khảo các Regular Expressions (Biểu thức chính quy) dưới đây để lấy được Video ID mong muốn

<?php
  $url = 'http://youtu.be/KVu3gS7iJu4';
  preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $matches);
 
  if (!empty($matches)) {
    echo $matches[1];
  }
?>

3, Lấy Youtube Video ID chứa trong iFrame

Get Youtube Video ID

Nếu các bạn dùng một iFrame để nhúng video vào trang web thì đoạn code lấy Video ID như sau

<?php
  $url = '<iframe width="560" height="315" src="https://www.youtube.com/embed/l1sETPnwrwsiDo" frameborder="0" allowfullscreen="allowfullscreen"></iframe>';
  preg_match('/(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=‌​(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+/', $url, $matches);
 
  if (!empty($matches)) {
    echo $matches[0];
  }
?>

4, Lấy Youtube Video ID chứa trong thẻ Object (HTML)

Get Youtube Video ID from Object HTML

Để lấy được Youtube Video ID trong thẻ Object thì chúng ta sẽ sử dụng đoạn code sau

<?php
  $html = '
    <object width="425" height="344">
      <param name="movie" value="http://www.youtube.com/v/Ou5eVl5dsadaeqtg&hl=es_ES&fs=1&" />
      <param name="allowFullScreen" value="true" />
      <param name="allowscriptaccess" value="always" />
      <embed src="https://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="allowfullscreen" width="425" height="344" />
    </object>';
 
  preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?#s', $html, $matches);
 
  if (!empty($matches)) {
    echo $matches[1];
  }
?>

5, Mở rộng

Có khi người dùng gõ/nhập một đoạn văn bản nào đó mà có chứa link Youtube. Làm thế nào tìm ra link Youtube và hiển thị link đó dưới dạng hyperlink ? Đoạn code dưới đây là câu trả lời.

<?php
  $text = "Lorem Ipsum is simply dummy text. http://www.youtube.com/watch?v=DUQi_R4SgWo of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. http://www.youtube.com/watch?v=A_6gNZCkajU&feature=relmfu It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
 
  $text = preg_replace('~
        # Match non-linked youtube URL in the wild. (Rev:20130823)
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube         # or youtube.com or
          (?:-nocookie)?  # youtube-nocookie.com
          \.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',
        '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>',
        $text);
 
  echo $result;
?>

Và đây là kết quả

Get Youtube Video ID from text

Hi vọng bài viết này sẽ giúp ích cho các bạn. Thân ái!

Nguồn Tấn Việt