Facebook 'Friends.getAppUsers' sử dụng API Đồ thị


87

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:


119

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 :


4
Vâng; Tôi đã trả lời câu hỏi của bạn với câu trả lời này: facebook.stackoverflow.com/questions/7956639/...
IgY

2
Truy vấn này kiểm tra cài đặt cho ứng dụng nào?
iOS Monster

3
Giả sử bạn không sử dụng bất kỳ trường nào khác (chẳng hạn như e-mail, ngày sinh, v.v.), để sử dụng tính đầy đủ /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).
plasmid87 5/12/12

5
Tại thời điểm viết bài này, truy vấn này trả về tất cả những người bạn (ngay cả những người bạn installedkhông đúng). Chúng tôi cần kiểm tra thủ công xem installedtrường có tồn tại cho mỗi người dùng hay không.
Pankaj Bhambhani

Vâng, chính xác, tôi đã chỉnh sửa câu trả lời để làm rõ ràng rằng bạn có được tất cả bạn bè và bạn phải kiểm tra xem những người nào đã cài đặt cờ.
Alex

27

Đ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!


1
Ban đầu tôi đã sử dụng truy vấn này và do độ trễ nên giờ đây, tôi chỉ nhận được tất cả bạn bè thông qua api biểu đồ và sau đó lọc ở phía ứng dụng của tôi.
Richard

Bạn có thể cho biết thêm chi tiết về độ trễ? Có phải truy vấn mất quá nhiều thời gian để trả lời không? Tôi đã thử nghiệm với một tài khoản FB với khoảng hơn 300 bạn bè và thời gian phản hồi là một vài giây (2 đến 4), không phải là quá tệ IMO.
loungerdork

1
Vâng, đó là những gì tôi thấy. API đồ thị sẽ theo thứ tự 500 mili giây để trả về hơn 400 người bạn, vì vậy tôi muốn có được tất cả và sau đó lọc về phía mình.
Richard

3
bạn cũng có thể sử dụng me()thay vì?
philfreo

8

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.


2
Ặc. Có vẻ như việc chuyển đổi ánh sáng sang api biểu đồ là một vấn đề nhức đầu hơn mà tôi đã hy vọng ban đầu.
Richard

4
Có thể dễ dàng hơn để làm mọi thứ bạn cần (ngoại trừ xuất bản) bằng FQL. Tệ nhất là Graph API sẽ không cung cấp cho bạn mọi thứ bạn cần, và tốt nhất, sẽ khiến bạn khó tìm ra cách làm như vậy.
Daniel Schaffer

6

API REST cũ:

$facebook->api_client->friends_getAppUsers();

API đồ thị mới:

$facebook->api(array('method' => 'friends.getAppUsers'));

4
Lệnh gọi phương thức SDK này sử dụng api phần còn lại cũ bên dưới. Đó không phải là biểu đồ api :-(
Richard

5

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.getAppUsersbằ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.


6
Điều này đã khá cũ và không còn là câu trả lời đúng. Kiểm tra câu trả lời của Alex ở trên cùng.
Bach,

Nó có thể không phải là câu trả lời đúng, nhưng đó là câu trả lời của OP, và rõ ràng tốt hơn là bạn nên tự tán thành hơn là đánh dấu câu trả lời đúng là đúng bởi vì cái tôi.
Ajax

4

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 installedtrườ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
        }
    }
}

1

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.


0

Bạn vẫn có thể gọi API REST cũ trong API Đồ thị mới. Điều đó hoàn toàn hợp lệ.

Một cách khác là sử dụng FQL để có được bạn bè của người dùng ứng dụng.

Tôi không chắc liệu có cách nào để thực hiện việc này chỉ bằng API Đồ thị hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.