Tôi có một ứng dụng sử dụng lệnh gọi API REST cũ Friends.getAppUsers
để lấy danh sách bạn bè cho người dùng hiện tại đã ủy quyền ứng dụng của tôi.
Tôi đã đọc tài liệu, làm cách nào để thực hiện việc này với API Đồ thị? Ví dụ về điều này sẽ là gì?
Câu trả lời:
Tôi đã tìm kiếm xung quanh một lúc và tôi cũng nghĩ rằng điều này là không thể sử dụng Graph API.
Tuy nhiên, tôi đã đăng một câu hỏi tương tự, Thay thế cho cuộc gọi GetAppUsers cũ để xem bạn bè của người dùng có sử dụng ứng dụng của tôi không? , cho API cụ thể mà tôi đang sử dụng và đã nhận được câu trả lời chung tuyệt vời.
https://graph.facebook.com/me/friends?fields=installed
hoặc nói chung
https://graph.facebook.com/{user id}/friends?fields=installed
Điều này trả về tất cả bạn bè, với trường bổ sung "install = true" cho những người bạn sử dụng ứng dụng.
Đây là nó hoạt động trong Graph API Explorer :
/me/friends?fields=id,name,installed
, giữ nguyên thứ tự trường và thông tin tiêu chuẩn được trả lại mà không ?fields=
được xác định (đúng vào ngày 2012/12/05).
installed
không đúng). Chúng tôi cần kiểm tra thủ công xem installed
trường có tồn tại cho mỗi người dùng hay không.
Điều này có thể được thực hiện với FQL.
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
me()
thay vì?
Có, API Đồ thị được ghi lại một cách khủng khiếp . Tôi không thấy bất kỳ tài liệu cho một "ứng dụng" loại , nhưng họ làm tham khảo thông tin của một ứng dụng trong các tài liệu:
https://graph.facebook.com/2439131959
Vì vậy, có lẽ bạn có thể nhận được các thành viên của ứng dụng bằng cách sử dụng cú pháp Nhóm?
https://graph.facebook.com/2439131959/members
Bạn sẽ cần một phiên được xác thực để kiểm tra nó. Nếu không, có vẻ như Facebook đang thúc đẩy chúng tôi sử dụng FQL để gửi truy vấn trực tiếp:
http://developers.facebook.com/docs/reference/fql/application
Bạn có thể thực hiện các truy vấn FQL bằng cách tìm nạp https://api.facebook.com/method/fql.query?query=QUERY . Bạn có thể chỉ định định dạng phản hồi là XML hoặc JSON với tham số truy vấn định dạng.
Vì vậy, bạn có thể chuyển một truy vấn FQL để lấy thông tin về ứng dụng của mình.
Tôi đã thực hiện rất nhiều cuộc điều tra về vấn đề này. Từ những gì tôi có thể nói, không có cách nào để thực hiện Friends.getAppUsers
bằng Graph API. Các SDK mới nhất do Facebook cung cấp đều sử dụng API REST cũ để kết bạn sử dụng ứng dụng.
Sử dụng restFB , tôi đã làm như sau (cảm ơn Igy / Alex đã hướng dẫn). Lưu ý rằng Facebook trả về một mảng ID bạn bè có "cài đặt" = true nếu người dùng đã được cài đặt (như có thể thấy ở đây ).
Đầu tiên hãy mở rộng lớp Người dùng, thêm một installed
trường:
import com.restfb.Facebook;
import com.restfb.types.User;
public class InstalledUser extends User {
@Facebook
private boolean installed;
public InstalledUser() {
}
public boolean getInsatlled() {
return installed;
}
}
Tiếp theo, sử dụng DefaultFacebookClient:
FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));
for (List<InstalledUser> friends : installedFacebookUsers) {
for (InstalledUser friend : friends) {
if (friend.getInsatlled()) {
// Add friend.getId() to a list of ID, or whatever
}
}
}
Cách giải quyết là tự thực hiện việc lọc. Có lẽ, bạn có tất cả uid của những người dùng đã đăng ký ứng dụng của bạn nằm trong cơ sở dữ liệu của riêng bạn. Vì vậy, trước tiên hãy lấy tất cả các nắp của bạn bè của người dùng và chọn những người dùng từ cơ sở dữ liệu của bạn có các nắp phù hợp.
Chương trình Facebook Graph API mới có vẻ được thực thi rất kém và không được suy nghĩ thấu đáo. Có vẻ như họ đã vội vàng phát hành nó cho Facebook f8 trước khi nó được hoàn thiện và rất nhiều chức năng đã có trước đây bị thiếu.