1

현재 사용자의 Facebook 친구가 처음 나열된 상태에서 내 응용 프로그램에서 사용자 목록을 반환 할 수 있기를 원합니다. 응용 프로그램을 사용하는 사용자의 친구를 반환하는 그래프 API를 쿼리하는 방법이 있지만 내 사이트에서 특정 작업을 수행 한 사용자 목록을 표시하고 FB 친구가 먼저 나열된 사용자와 정렬 할 수 있기를 원합니다. 그래서 사용자 목록을 표시 할 때마다이 정렬 작업을 수행 할 수 있습니다.맨 위에 Facebook 친구가있는 사용자 목록을 어떻게 분류합니까?

내가보기에 가장 좋은 예가 meetup.com입니다. 모임에 참석중인 사람들의 목록을 표시 할 때이 작업을 수행합니다.

An example of how Meetup sorts a user list with FB friends first

내가이 사람에게 어떤 차이를 만들 것입니다 모르겠지만, 그것은 레일 애플 리케이션 내가 페이스 북을 통해 인증을 수행 할 OmniAuth을 사용하고 있습니다 : 다음은 그 예입니다.

답변

1

친구 상태 열이 없기 때문에 친구 상태를 정렬 할 수 없습니다. 친구 테이블을 다른 테이블과 조인하거나 결합하는 복잡한 SQL 작업은 FQL이 이러한 작업을 지원하지 않기 때문에 수행 할 수 없습니다. 당신이 할 수있는 최선

SELECT uid FROM friend WHERE uid IN (...ALL USER IDs...) 

모든 UID 년대는 누구들만을 포함하여 전체 목록의 하위 집합이 될 것이다 쿼리에서 반환 ... 친구는 별도의 쿼리를 통해이 누군지 식별입니다 친구.

정보 추가 :

만남 응용 프로그램은 ...이 참가자 목록을 생성하는 로컬 데이터베이스의 쿼리

  1. 첫째. 그들은 그 [participants] 친구들의 확인하려면 페이스 북 친구 데이터베이스에 쿼리를 수행, 그리고
  2. (결과 [participants]를 호출 할 수 있습니다). ([participants])

  3. IN UID 그들은 또한 로컬 데이터베이스에 [participating_friends] UID 년대의 목록을 저장 친구로부터

    SELECT UID (결과 [participating_friends]를 호출 할 수 있습니다). 하나의 열은 사용자의 ID (uid)이고 다른 하나는 친구의 uid (friendid)입니다.마지막으로

  4. , 같은 쿼리가 (3에서) 자신의 로컬 친구의 데이터베이스를 조회 친구의 친구를 결정하기 : 이 local_friends FROM을 friendid

    선택 WHERE UID IN ([participating_friends])

UPDATE : 돌이켜 보면, 만남 C를 수 있습니다

만남 응용 프로그램은 ...

  1. 먼저이 참가자 목록을 생성하는 로컬 데이터베이스의 쿼리를 다음과 같이 더 넓은 그물을 asting. 그들은 그 [participants] 친구들의 확인하려면 페이스 북 친구 데이터베이스에 쿼리를 수행, 그리고
  2. (결과 [participants]를 호출 할 수 있습니다).

  3. ([participants]) IN UID는 사용자 app 해당되는 응용 프로그램 사용자의 모든 친구를 결정하는 친구로부터

    SELECT UID 및 결과를 저장 (결과 [participating_friends]를 호출 할 수 있습니다) 로컬 데이터베이스에서 uid 님의 정보를 저장하고 friendid 님의 정보를 저장합니다.

    UID의 IN은 새로운

  4. 마지막으로 AND is_app_user (UID1 저를() = WHERE 친구로부터 UID2 선택) 친구의 친구를 결정하기 위해 계산 사용자로부터 SELECT UID :

    [participants_not_friends] = [participants] - [participating_friends].

    는 다음과 같은 쿼리 (3에서) 로컬 친구의 데이터베이스를 조회 :

    선택 이 local_friends로부터 friendid WHERE UID IN ([participants_not_friends])

+1

예, 기본적으로 참석자 목록, 친구 목록 및이 두 답변을 비교합니다 – Igy

+2

이 대답은 정확하고 정확합니다. 당신이 다운 투표를한다면 아마도 자신을 설명해야 할 것입니다. –

0

예, 각 사용자에 대한 친구 목록을 얻을 수 있습니다. 여기 내가 어떻게 그것을 할 것입니다.

등록시 사용자가 Facebook에 등록하면 ID를 데이터베이스에 저장합니다.인증 된 사용자가 귀하의 기록 중 하나, 문제는 API를 통해이 FQL 쿼리를 볼 때

는 :

SELECT uid, name, pic_square, mutual_friend_count FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 
    AND is_app_user 
ORDER BY mutual_friend_count DESC 

이 당신에게 상호 주문한 현재 사용자와 친구 앱 다시 다른 사용자를 줄 것이다 앱 사용자와 각 친구 사이의 친구 수 (친한 친구가 더 많은 수의 상호 친구가 있다고 가정 할 때)

이 쿼리의 결과를 데이터베이스의 저장된 Facebook ID와 비교하여이 목록을 데이터베이스의 다른 메트릭과 비교할 수 있습니다.

친구의 친구 표시는 까다로운 제안입니다. 다음 쿼리를 시도한 경우 :

SELECT uid2 FROM friend WHERE uid1 IN 
(SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 1) 

권한 오류가 발생합니다. Facebook은 친구의 친구를 사귈 수 없습니다.

앱에 중요하다면 앱 사용자의 가장 최근의 친구 목록을 로그인 할 때마다 (또는 확장 된 액세스 토큰을 요청한 경우 일정에 따라) 캐싱하고이를 쿼리 할 수 ​​있습니다 모든 사용자의 친구와 공통된 친구가 있는지 확인하십시오. TOS를 자세히 살펴보고 합법적 인 방법을 확인해야합니다.

관련 문제