[PHP] Dùng Regular Expressions để lấy Facebook Page ID trên URL

Trong bài viết hôm nay tôi sẽ giới thiệu các bạn 1 số Regular Expressions (viết tắt là Regex) để lấy Facebook Page ID dựa trên URL có sẵn. Hiểu đơn giản là nếu tôi có những đường link như https://www.facebook.com/tanvietblog hay https://www.facebook.com/profile.php?id=123456789 thì giá trị tôi muốn lấy là tanvietblog123456789. Nhưng trước tiên tôi sẽ giải thích sơ lược về Regular Expressions.

1, Regular Expressions là gì ?

Regular Expressions được dịch là Biểu thức chính quy, là 1 dạng kĩ thuật nhỏ mà hữu ích trong 1 vùng rộng lớp của chương trình, mặc dù không được nhiều nhà phát triển biết đến. Nó có thể hiểu như là 1 ngôn ngữ nhỏ dùng cho mục đích để tìm chuỗi con trong biểu thức chuỗi lớn. Nó không phải là một kĩ thuật mới, xuất phát từ môi trường UNIX, đuợc dùng với PERL.

Và theo Wikipedia thì Biểu thức chính quy được mô tả như sau:

Biểu thức chính quy (tiếng Anh: regular expression, viết tắt là regexp, regex hay regxp) là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định. Biểu thức chính quy thường được dùng trong các trình biên tập văn bản và các tiện ích tìm kiếm và xử lý văn bản dựa trên các mẫu được quy định. Nhiều ngôn ngữ lập trình cũng hỗ trợ biểu thức chính quy trong việc xử lý chuỗi, chẳng hạn như Perl có bộ máy mạnh mẽ để xử lý biểu thức chính quy được xây dựng trực tiếp trong cú pháp của chúng

Ngoài ra, các bạn có thể tham khảo thêm một số bài viết về Regular Expressions dưới đây:

2, Regular Expressions để lấy Facebook Page ID trên URL

Đây là nội dung chính mà tôi muốn giới thiệu đến các bạn. Tôi đã tình cờ tìm được một số Regex của tác giả Marc G Gauthier để lấy Facebook Page ID trên URL trong bài viết này.

Và đây là đoạn code PHP mà tôi sử dụng

<?php
# Matches patterns such as:
# https://www.facebook.com/my_page_id => my_page_id
# https://www.facebook.com/my_page_id?ref=hl => my_page_id
# http://www.facebook.com/my_page_id => my_page_id
# http://www.facebook.com/#!/my_page_id => my_page_id
# http://www.facebook.com/pages/Paris-France/Vanity-Url/123456?v=app_555 => 123456
# http://www.facebook.com/pages/Vanity-Url/45678 => 45678
# http://www.facebook.com/#!/page_with_1_number => page_with_1_number
# http://www.facebook.com/bounce_page#!/pages/Vanity-Url/45678 => 45678
# http://www.facebook.com/bounce_page#!/my_page_id?v=app_166292090072334 => my_page_id
# http://www.facebook.com/my.page.is.great => my.page.is.great
#Link : https://gist.github.com/733592
$facebook_profile = 'https://www.facebook.com/tanvietblog';
preg_match('/(?:https?:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/', $facebook_profile, $matches);
if(!empty($matches)) {
echo $matches[1];
}
?>

3, Mở rộng

Trong lúc thử nghiệm với nhiều trường hợp khác nhau thì tôi phát hiện một số trường hợp mà đoạn Regex ở trên chưa xử lý được. Ví dụ khi tôi sử dụng đường link sau https://www.facebook.com/profile.php?id=123456789 thì kết quả lại là profile.php?id=100004053193401, một kết quả không mong muốn.

Đoạn code tôi sử dụng cho trường hợp trên là

<?php
$facebook_profile = 'https://www.facebook.com/profile.php?id=100004053193401';
preg_match('/(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?/', $facebook_profile, $matches);
if(!empty($matches)) {
echo $matches[1];
}
?>

Hi vọng bài viết này có ích với các bạn. Thân ái!

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like…

4 Responses

  1. hung says:

    ban oi minh moi bi hack fece ban co cach nao lay lai ko.no doi ten xoa ban be.doi email chinh vao phu luong.huhu.minh con email chinh va phu ma gio chan con lam duoc gi de lay lai. bao mat tai khoan thi ko lam duoc gi het.keo xac nhan danh tinh.minh dang nhap tren dt cung ko lam gi duoc luong.huhu.co cach nao giup minh ko.cam on ban nhiu

    • Tấn Việt says:

      “Bạn nhấn vào dòng quên mật khẩu, sau đó nó sẽ yêu cầu kiểm tra 5 người bạn của mình có trong danh sách bạn bè của bạn. Bạn trả lời đúng nó sẽ gửi lại mật khẩu facebook cho bạn ? Bạn thử làm nhé !”

      => Ngoài ra bạn có thể dùng email chính + phụ để lấy lại mật khẩu nhưng đằng này hacker đã đổi email chính và xóa danh sách bạn bè. Bạn gặp đúng cao thủ rồi đó. Rất tiếc mình không giúp được bạn rồi…:(

  2. Tung says:

    Có cách nào để lấy đc username facebook của người ghé thăm web ko b?

  3. Elly says:

    hi ad! Nếu trang face :https://www.facebook.com/nhan.thanh.338?fref=ts là có ý nghĩa gì vậy ak, có xem đc thông tin của trang đó qua những cách mak ad giới thiệu ko ak, thanks!

    Còn trang face bình thường e cũng muốn ko cho ng khác bjk haocự trách tình trạng ng ta hack mình thì e nên cài đặt ntn ak, thanks!