1
의 회원입니다.

내 친구 목록에 대한 개요를 보려면 자바 스크립트 페이스 북 앱을 만들고 있습니다. 실제로 (로그인 한 사용자 = 나) 친구 목록을 검색 할 수 있습니다. 친구 목록을 클릭하면 그 목록에있는 모든 친구를 볼 수 있습니다.facebook 배치/fql 친구 목록 친구가

내가 지금 원하는 것은 목록을 클릭하면 그 목록에 속하는 친구를보고 싶고, 쉼표로 구분 된 목록은 내 친구가 구성원 인 것입니다. 목록 예를 들어

"최고의" 나는 세 친구가 있습니다 아토스, 포르 토스, 아라미스을. 그러나 그들은 또한 다른 목록에 있습니다.

  • 아토스 : : 최고의, 가족, 친한 친구, VIP
  • 포르 토스 : 제일, VIP
  • 아라미스 : 그래서 내 응용 프로그램에서 나는 이런 식으로 뭔가를 좀하고 싶습니다 최저 , 가까운 친구, 파티 동물

나는 FQL 멀티 쿼리를 시도했지만, 내가 원하는 것을 얻는 것이 불가능 해 보입니다.

그래서 일괄 요청을 사용해야한다고 생각하지만 여기서는 일괄 처리를 많이 사용하지 않아서 도움을 요청하고 있습니다.

여기 FQL 쿼리를 사용하여 목록에 속한 친구를 사귈 수 있습니다. 목록에서 시작하여 친구를 관리하고 싶기 때문에 필요합니다.

var listID = 123;//just enter a listID 
var friendsInList = 'SELECT uid,username,profile_url,first_name,last_name,pic_square FROM user WHERE uid IN (SELECT uid FROM friendlist_member WHERE flid =' + listID +')'; 

이제는 깨끗하고 효율적인 방법으로 진행하는 방법을 모르겠습니다. 따라서 나는 프로 싶습니다 ...

//[...]FB.api call to get a response object with all my friends using the friendsInList query above 
for (var i = 0; i < response.length; i++) { 
    friendID = response[i].uid; 
    //call FB.api with the following query: 
    var friendListMemberships = 'SELECT uid, flid, name FROM friendlist_member WHERE flid IN (SELECT flid FROM friendlist WHERE owner=me()) AND uid IN (select uid FROM friendlist WHERE flid =' + friendID; 
} 

위의 솔루션이 작동하지만 각 친구에 대한 FB.api 요청을 보내와 같은 큰 목록에 대한 매우 느린 매우 비효율적이다 : 나는 작동하지만 비효율적 인 해결책을 가지고 있습니다 사용자가 batch에 배치하는 데 도움을 줄 수 있습니다 (배치는 최대 50 개의 요청을 가질 수 있으므로 1-2 개의 요청을 보내고 필요한 모든 것을 다시 얻고 싶습니다).

var listID = _listID; 

var _queryFriendsInList = 'SELECT uid,username,profile_url,first_name,last_name,pic_square FROM user WHERE uid IN (SELECT uid FROM friendlist_member WHERE flid =' + listID + ')'; 

var queryFriendsInList = _queryFriendsInList.replace(" ", "+"); 

var _queryFriendListMemberships = 'I have no idea what kind of query I can write here to get the lists my friends from queryFriendsInList are member of'; 

var queryFriendListMemberships = _queryFriendListMemberships.replace(" ", "+"); 

var searchArgs = { 
    access_token: FB.getAuthResponse().access_token, 
    batch: [] 
}; 

searchArgs.batch.push({ 
    'method': 'GET', 
    'name': 'friendsInList', 
    'relative_url': 'method/fql.query?query=' + queryFriendsInList, 
    'omit_response_on_success': false 
}); 

//here is where I need help 
searchArgs.batch.push({ 
    'method': 'GET', 
    'name': 'friendlistMememberships', 
    'relative_url': 'method/fql.query?query=' + queryFriendListMemberships, 
    'omit_response_on_success': false 
}); 

FB.api("/", "POST", searchArgs, 
function (response) { 
    //console.log("log"); 
} 
); 

내가 질문 코드 샘플이 충분히 명확 바랍니다 : 당신이 두 번째 쿼리를 완료 도울 수 있다면 내가 배치를 작성하는 방법을 알고

, 여기에 내가, 내 코드의 구조를 넣어 . 도와 주셔서 감사합니다!

+1

먼저 친구 및 친구 목록을 얻은 다음 클라이언트 측 데이터를 함께 저장하는 것이 어떻습니까? 나는 API를 통해 그것을 시도하는 것보다 더 효율적이라고 생각한다. – CBroe

답변

1

하나의 API 호출에서 원하는 모든 것을 멀티 쿼리로 얻을 수 있습니다. 몇 개의 루프를 사용하여 클라이언트 측에서 함께 어셈블해야하지만 너무 어렵지는 않습니다. 다음은 쿼리입니다.

{ 
"all_friendlists": 
    "SELECT flid, owner, name FROM friendlist WHERE owner=me()", 
"fl_members": 
    "SELECT uid, flid FROM friendlist_member WHERE flid IN 
     (SELECT flid FROM #all_friendlists)", 
"fl_member_details": 
    "SELECT uid, name, username FROM user WHERE uid IN (SELECT uid FROM #fl_members)" 
} 

이 API 호출을 통해 모든 것을 사용자에게 제공 할 수 있습니다. #all_friendlists 쿼리는 모든 사용자의 친구 목록을 제공합니다. 사용자가 친구 목록을 선택하면 #fl_members을 반복하여이 목록의 모든 회원을 찾고 #fl_member_details에서 세부 정보를 검색합니다. 다른 루프가 속하는 다른 목록을 찾으려면 #fl_members을 통해 다른 루프를 만듭니다.

이 세리스트를 하나의 프리젠 테이션 페이지로 함께 짓고 Isotope과 같은 jQuery 데이터 필터링 스키마를 사용하면 사용자가 정렬/필터링/등을 할 수 있습니다. 즉석에서.

+0

고마워, 나는 이런 목표를 달성 할 수 있다고 생각하지 않았다. 각 클릭에 대해 FB에 요청을 보내 "게으른"방법을 사용하고 싶었습니다. 내가 처음에는 모든 것을 얻으라고 제안 했으므로 어떤 객체 배열에 저장하고 더 이상 FB와의 상호 작용없이 클라이언트에있는 객체에 대해 작업합니다. 단점 : 이러한 "캐시"배열을 수동으로 업데이트 할 때마다 목록에서 친구를 삭제하는 등의 작업을 수행 할 것이지만 하나를 추가하는 등의 작업을 수행 할 것입니다.하지만이 경우에는 확실히 javascrpt 기술을 향상시킬 것입니다. isotope (jQuery 템플릿과 유사하다고 말할 수는 없습니까?)에 대해 알려주십시오. 다시 한 번 감사드립니다! – firepol

+0

동위 원소 웹 사이트를 간략하게 살펴보십시오. 그 밖의 다른 것과 정말로 비슷하지 않습니다. 네, 이것을 기반으로 친구 목록을 업데이트하는 경우 모든 것을 다시 가져와야하지만 아직 API 호출이 1 개이므로 빨리 처리해야합니다. – cpilko

+0

cpilko : thx again - fyi 내 새 앱에서 동위 원소 필터링 및 애니메이션을 사용하여 실제 해결책을 볼 수 있습니다 (이전의 "샌드 박스"이제 공개적으로 테스트 할 수 있음) : friendsmanager.pbworks.org – firepol

관련 문제