2011-06-23 10 views
8

Jestem zdezorientowany przez metodę fql.multiquery Facebooka.Jak używać wyników z wielokąta FB FQL?

Próbuję pobrać wszystkie komentarze do wpisu, a następnie informacje o użytkowniku dla każdego z nich. Mogę dostać komentarze bez żadnego problemu, ale mam problemy z uzyskaniem użytkowników.

Obecnie używam następujący:

FB.api({ 
    method: 'fql.multiquery', 
    queries: { 
    query1: 'SELECT post_fbid, fromid, text, time FROM comment WHERE post_id="'+postID +'"', 
    query2: 'SELECT id, name, url, pic FROM profile WHERE id IN (SELECT fromid FROM #query1)' 
    } 
    }, 
    function(response) { 
    } 
}) 

To daje mi następującą odpowiedź:

[ 
    { 
    "name": "query1", 
    "fql_result_set": [ 
     { 
     "post_fbid": "xxxxx", 
     "fromid": user1id, 
     "text": "Here's a comment", 
     "time": 1308579931 
     }, 
     { 
     "post_fbid": "xxxxx", 
     "fromid": user2id, 
     "text": "Another comment", 
     "time": 1308580031 
     } 
    ] 
    }, 
    { 
    "name": "query2", 
    "fql_result_set": [ 
     { 
     "id": user1id, 
     "name": "User 1 name", 
     "url": "User 1 url", 
     "pic": "User 1 pic" 
     }, 
     { 
     "id": user2id, 
     "name": "User 2 name", 
     "url": "User 2 url", 
     "pic": "User 2 pic" 
     } 
    ] 
    } 
] 

Problem polega na tym, że nie wiem jak dopasować je do góry! Pętlę nad komentarzami i chcę wydrukować tekst każdego z nazwiskiem użytkownika obok niego. Jak mogę to zrobić?

Czy istnieje lepszy sposób na zrobienie tego?

Odpowiedz

10

Możesz dopasować te wyniki do góry, zapętlając komentarze i dopasowując identyfikator do id z odpowiedzi użytkownika.

Na przykład:

var comments = response[0].fql_result_set; 
    var users = response[1].fql_result_set;  

    //loop through the comments 
    for(var i = 0, j = comments.length; i<j; i++){ 

     for(var x = 0, y = users.length; x<y; x++){ 
      if(comments[i].fromid == users[x].id){ 
       //we have a match, this comment is from user users[x] 
       //process users[x] 
       //break the inner for loop, since we already have a match 
      } 
     } 

    } 
+0

Dziękuję, dokładnie tego potrzebowałem! Naprawdę mi pomogłeś - dzięki jeszcze raz. – Sharon

+0

Bez problemu. Stary interfejs REST API może czasem być mylący. –

+2

Nie mogę uwierzyć, że tego typu rzeczy są tak pomieszane w dokumentacji Facebooka. Dziękuję Ci! – Warpling

0

Jeśli pracujesz z PHP i trzeba pojedynczy szereg uwag pętli tej funkcji może się przydać:

public function getComments($objectID){ 
    $user = $comment =array(); 
    $q1 = "/fql?q=".urlencode("SELECT id, fromid, text, time , likes FROM comment WHERE object_id ='$objectID' "); 
    $res = $this->api($q1); 
    $com = $res['data']; 

    $q2 = "/fql?q=".urlencode("SELECT uid, name, username, pic_small, current_location FROM user WHERE uid IN (SELECT fromid FROM comment WHERE object_id ='$objectID')"); 
    $res = $this->api($q2); 
    $usr = $res['data']; 

    foreach($usr as $k=>$v){ 
     $user[$v['uid']] = $v; 
    } 
    foreach($com as $cmnt){ 
     $comment[$cmnt['id']] = $cmnt; 
     $comment[$cmnt['id']]['user'] = $user[$cmnt['fromid']]; 
    } 
    return $comment; 
} 

Zwraca pojedynczą tablicę komentarze z komentarzem jako kluczem:

Array(

[137194739772009_249649] => Array 
    (
     [id] => 137194739772009_249649 
     [fromid] => 1454592211 
     [text] => Brilliant! 
     [time] => 1357450854 
     [likes] => 1 
     [user] => Array 
      (
       [uid] => 1454592211 
       [name] => Jo Payne 
       [username] => jo.payne.127 
       [pic_small] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/203035_1454592211_505092710_t.jpg 
       [current_location] => Array 
        (
         [city] => Pascoe Vale 
         [state] => Victoria 
         [country] => Australia 
         [zip] => 
         [id] => 107340732634422 
         [name] => Pascoe Vale, Victoria, Australia 
        ) 

      ) 

    ) 

[137194739772009_252711] => Array 
    (
     [id] => 137194739772009_252711 
     [fromid] => 1734247348 
     [text] => testing 
     [time] => 1357531321 
     [likes] => 0 
     [user] => Array 
      (
       [uid] => 1734247348 
       [name] => Andreas Lustig 
       [username] => andreaslustigcom 
       [pic_small] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/275058_1734247348_2025403101_t.jpg 
       [current_location] => Array 
        (
         [city] => Melbourne 
         [state] => Victoria 
         [country] => Australia 
         [zip] => 
         [id] => 116190411724975 
         [name] => Melbourne, Victoria, Australia 
        ) 

      ) 

    ) 

) 
+1

Uwaga: musisz przekazać * numeryczne * objectID, aby mogło działać w 100%. Jeśli jesteś obiektem, strona internetowa URL * może * działać, ale nie zawsze, jak się dowiedziałem. Lepiej zdobyć numeryczny identyfikator ObjectID za pomocą Debugera obiektów: http://developers.facebook.com/tools/debug/og/object?q={TWÓR URL - TUTAJ} To jedyny * niezawodny * sposób, jaki znalazłem aby uzyskać numeryczny identyfikator obiektu. Identyfikator obiektu będzie znajdować się w ostatnim wierszu: Interfejs API wykresów: \t http://graph.facebook.com/{IDOID OBIEKTU} –

Powiązane problemy