Mấy ngày nay trên Facebook thấy có quá chừng người đặt câu hỏi xoay quanh việc làm sao có thể đếm được hết số bài cũng như trích xuất được hết mọi post có gắn một hashtag nhất định. Thực ra việc này không quá khó, nhiều công ty về truyền thông ở Việt Nam đã làm nhiều năm nay để thu thập thông tin và đo mức độ ảnh hưởng cho các chương trình marketing / quảng cáo. Một số công ty khác thì bán giải pháp trích xuất thông tin từ Facebook với đa dạng các nội dung có thể lấy được.
Về cơ bản, để làm chuyện này có 2 cách:
Cách 1: sử dụng API do Facebook cung cấp. Đây là cách chính đạo, được Facebook hỗ trợ một cách chính thức và bạn có thể xem đầy đủ tại địa chỉ developers.facebook.com/docs/graph-api/. Với mỗi API (thực chất chỉ là một đường link, như trong ảnh bên dưới bạn thấy đoạn graph.facebook.com/v3.2/me?fields=... chính là API đấy), Facebook sẽ trả về data được yêu cầu, ví dụ như bên dưới là mẫu data lấy thông tin cá nhân của tài khoản mình. Dữ liệu được trả về theo định dạng JSON, và khi có chuỗi JSON này mình có thể lấy được tên, ngày tháng năm sinh, sở thích... (nếu bạn có cấp quyền cho app). Thông tin sau đó được lưu trữ vào một số cơ sở dữ liệu để dùng về sau mà không cần đi trích xuất lại.
Ngày xưa từ năm 2017 trở về trước thì việc lấy dữ liệu qua API rất dễ thở, lấy được rất nhiều thông tin và không chỉ lấy từ fanpage, group mà còn lấy được từ cả trang cá nhân và các post của bạn bè mà cá nhân đó có kết bạn. Điều đó khiến việc trích xuất dữ liệu trở nên cực kì dễ dàng.
Tuy nhiên, kể từ sau khi scandal Cambridge Analytics nổ ra, Facebook đã siết rất chặt việc trích dữ liệu từ API. Kể từ ngày 1/4/2018, Facebook siết chặt lại về quyền, về thông tin trả về khi sử dụng API cũng như cấm hẳn một số API, ví dụ như API sẽ chỉ thấy được post của chính người dùng đang đăng nhập, không thể thấy post của những bạn bè có comment lên post chẳng hạn.
Quay trở lại vụ hashtag, Facebook lúc trước có cung cấp việc truy xuất dữ liệu public có hashtag nào đó, tuy nhiên họ buộc bên muốn lấy dữ liệu phải là một nhà xuất bản, một trang tin tức nào đó thì mới cho lấy. Chưa rõ bây giờ API hashtag có còn chạy không, nhưng mình biết một số công ty ở Việt Nam có tài khoản dạng publisher này và họ có thể dễ dàng track được các thông tin được hashtag.
Cách 2: sử dụng phương thức crawling hoặc scrapping. Kĩ thuật này sẽ dùng các con "bot" hoặc còn được gọi là "crawler" đi đọc mã nguồn trang web rồ trích thông tin từ các thẻ HTML. Nói đâu xa, Google là công ty dùng crawling mạnh nhất, họ crawl và lưu trữ thông tin của cả thế giới còn được cơ mà. Thì giờ chúng ta dùng kĩ thuật tương tự để lấy dữ liệu trên Facebook mà thôi. Cái gì mà hiện ra web được thì sẽ scrap được hết.
Từng thẻ HTML có các id và tag nhất định, con crawler sẽ sử dụng các tag này để xác định đúng vị trí cần lấy dữ liệu. Ví dụ bên dưới là đoạn HTML của trang public với hashtag #ngayhoihoahuongduong2018, mình có thể nhanh chóng xác định được những tấm ảnh được đăng tải, tìm tên tác giả, link tới Facebook của tác giả và cả nội dung câu chữ caption.
Cũng trong trang này có nút See more, tức là tải thêm những nội dung public khác. Nếu mình đủ siêng ngồi bấm nút See more này vài trăm (hoặc vài nghìn lần), mình có thể xem được hết mọi post có hashtag #ngayhoihoahuongduong2018. Tất nhiên khi viết thành script tự động thì máy sẽ giả lập thao tác click này cho mình nên tốc độ rất nhanh. Cứ click, trích xuất dữ liệu, lưu xuống database, rồi sau đó lại tiếp tục làm như vậy cho đến khi không còn nút See more nữa là kết thúc. Lúc này chỉ việc đếm các kết quả đã lưu là ra được tổng số post có hashtag, đơn giản như đang giỡn.
Việc viết một con crawler không phải chuyện khó, gần như mọi lập trình viên đều có thể làm được. Tất nhiên để crawl số lượng lớn và crawl nhiều trang khác nhau thì sẽ cần mọi số kĩ thuật và thiết kế đặc biệt nhưng nguyên lý cơ bản là không khác nhau. Cứ lấy HTML moi ra thông tin cần thiết là được. Kể cả web bắt login mới cho xài thì crawler cũng xử được luôn.
Bản thân Tinh tế cũng đang dùng một tool lấy dữ liệu, tool này do các em gái dễ thương của team Data viết ra chứ không đi mua tool. Script này trích xuất dữ liệu từ Facebook để quay random cho các game chơi trên fanpage hoặc group Tinh tế. Chỉ có cách này bọn mình mới lấy được hết comment của anh em trong những post tặng quà vốn có thể lên tới vài nghìn comment. Tất nhiên bọn mình không cần lưu lại các thông tin cá nhân của anh em làm gì cả, chỉ lấy dữ liệu comment nhằm kiểm tra xem hợp lệ hay không (nếu game có yêu cầu comment số ngẫu nhiên) và lấy link tới comment để thông báo trúng giải cho anh em sau khi quay random xong mà thôi.
Về cơ bản, để làm chuyện này có 2 cách:
Cách 1: sử dụng API do Facebook cung cấp. Đây là cách chính đạo, được Facebook hỗ trợ một cách chính thức và bạn có thể xem đầy đủ tại địa chỉ developers.facebook.com/docs/graph-api/. Với mỗi API (thực chất chỉ là một đường link, như trong ảnh bên dưới bạn thấy đoạn graph.facebook.com/v3.2/me?fields=... chính là API đấy), Facebook sẽ trả về data được yêu cầu, ví dụ như bên dưới là mẫu data lấy thông tin cá nhân của tài khoản mình. Dữ liệu được trả về theo định dạng JSON, và khi có chuỗi JSON này mình có thể lấy được tên, ngày tháng năm sinh, sở thích... (nếu bạn có cấp quyền cho app). Thông tin sau đó được lưu trữ vào một số cơ sở dữ liệu để dùng về sau mà không cần đi trích xuất lại.
Ngày xưa từ năm 2017 trở về trước thì việc lấy dữ liệu qua API rất dễ thở, lấy được rất nhiều thông tin và không chỉ lấy từ fanpage, group mà còn lấy được từ cả trang cá nhân và các post của bạn bè mà cá nhân đó có kết bạn. Điều đó khiến việc trích xuất dữ liệu trở nên cực kì dễ dàng.
Tuy nhiên, kể từ sau khi scandal Cambridge Analytics nổ ra, Facebook đã siết rất chặt việc trích dữ liệu từ API. Kể từ ngày 1/4/2018, Facebook siết chặt lại về quyền, về thông tin trả về khi sử dụng API cũng như cấm hẳn một số API, ví dụ như API sẽ chỉ thấy được post của chính người dùng đang đăng nhập, không thể thấy post của những bạn bè có comment lên post chẳng hạn.
Quay trở lại vụ hashtag, Facebook lúc trước có cung cấp việc truy xuất dữ liệu public có hashtag nào đó, tuy nhiên họ buộc bên muốn lấy dữ liệu phải là một nhà xuất bản, một trang tin tức nào đó thì mới cho lấy. Chưa rõ bây giờ API hashtag có còn chạy không, nhưng mình biết một số công ty ở Việt Nam có tài khoản dạng publisher này và họ có thể dễ dàng track được các thông tin được hashtag.
Cách 2: sử dụng phương thức crawling hoặc scrapping. Kĩ thuật này sẽ dùng các con "bot" hoặc còn được gọi là "crawler" đi đọc mã nguồn trang web rồ trích thông tin từ các thẻ HTML. Nói đâu xa, Google là công ty dùng crawling mạnh nhất, họ crawl và lưu trữ thông tin của cả thế giới còn được cơ mà. Thì giờ chúng ta dùng kĩ thuật tương tự để lấy dữ liệu trên Facebook mà thôi. Cái gì mà hiện ra web được thì sẽ scrap được hết.
Từng thẻ HTML có các id và tag nhất định, con crawler sẽ sử dụng các tag này để xác định đúng vị trí cần lấy dữ liệu. Ví dụ bên dưới là đoạn HTML của trang public với hashtag #ngayhoihoahuongduong2018, mình có thể nhanh chóng xác định được những tấm ảnh được đăng tải, tìm tên tác giả, link tới Facebook của tác giả và cả nội dung câu chữ caption.
Cũng trong trang này có nút See more, tức là tải thêm những nội dung public khác. Nếu mình đủ siêng ngồi bấm nút See more này vài trăm (hoặc vài nghìn lần), mình có thể xem được hết mọi post có hashtag #ngayhoihoahuongduong2018. Tất nhiên khi viết thành script tự động thì máy sẽ giả lập thao tác click này cho mình nên tốc độ rất nhanh. Cứ click, trích xuất dữ liệu, lưu xuống database, rồi sau đó lại tiếp tục làm như vậy cho đến khi không còn nút See more nữa là kết thúc. Lúc này chỉ việc đếm các kết quả đã lưu là ra được tổng số post có hashtag, đơn giản như đang giỡn.
Việc viết một con crawler không phải chuyện khó, gần như mọi lập trình viên đều có thể làm được. Tất nhiên để crawl số lượng lớn và crawl nhiều trang khác nhau thì sẽ cần mọi số kĩ thuật và thiết kế đặc biệt nhưng nguyên lý cơ bản là không khác nhau. Cứ lấy HTML moi ra thông tin cần thiết là được. Kể cả web bắt login mới cho xài thì crawler cũng xử được luôn.
Bản thân Tinh tế cũng đang dùng một tool lấy dữ liệu, tool này do các em gái dễ thương của team Data viết ra chứ không đi mua tool. Script này trích xuất dữ liệu từ Facebook để quay random cho các game chơi trên fanpage hoặc group Tinh tế. Chỉ có cách này bọn mình mới lấy được hết comment của anh em trong những post tặng quà vốn có thể lên tới vài nghìn comment. Tất nhiên bọn mình không cần lưu lại các thông tin cá nhân của anh em làm gì cả, chỉ lấy dữ liệu comment nhằm kiểm tra xem hợp lệ hay không (nếu game có yêu cầu comment số ngẫu nhiên) và lấy link tới comment để thông báo trúng giải cho anh em sau khi quay random xong mà thôi.