2011-06-23 12 views
8

Facebook'un fql.multiquery yöntemi ile karıştırıldım.FB FQL multiquery'den sonuçları nasıl kullanabilirim?

Bir gönderideki tüm yorumları ve sonra da her biri için kullanıcı bilgilerini almaya çalışıyorum. Yorumları sorunsuz bir şekilde alabilirim, ancak kullanıcıları almayla ilgili sorun yaşıyorum.

Şu anda kullanıyorum şu: Bu bana şu yanıtı veriyor

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) { 
    } 
}) 

:

[ 
    { 
    "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" 
     } 
    ] 
    } 
] 

Sorun, ben bu kadar maç nasıl bilmiyorum! Bu yüzden yorumların üstesinden geliyorum ve her birinin metnini yanında kullanıcının adıyla yazdırmak istiyorum. Bunu nasıl yaparım? Ya da bunu yapmanın daha iyi bir yolu var mı?

cevap

10

Bu sonuçları, yorumların üzerinde döngü yaparak ve fromid ile kullanıcı yanıtındaki bir kimlikle eşleştirerek eşleştirebilirsiniz. PHP ile çalışan ve bu işlev döngü yorumların tek bir dizi ihtiyacınız varsa

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

Teşekkür ederim, tam ihtiyacım olan şey buydu! Bana gerçekten yardım ettin - tekrar teşekkürler. – Sharon

+0

Sorun değil. Eski REST API bazen kafa karıştırıcı olabilir. –

+2

Bu tür şeylerin Facebook'un belgelerinde yer aldığına inanamıyorum. Teşekkür ederim! – Warpling

0

işe yarayabilir: Örneğin

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; 
} 

tek dizi döndürür commentID ile yapılan yorumlarID olarak yorumlar:

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

Not:% 100 çalışmak için bunun için bir * sayısal * objectID geçirmeniz gerekir. Eğer bir nesneyseniz, bir web sitesi URL * * çalışabilir, ancak her zaman bulduğum gibi olmayabilir. Daha iyi Nesne Debugger'daki aracılığıyla sayısal NesneKimliği almak için: http://developers.facebook.com/tools/debug/og/object?q={YOUR BURADA URL} Bu Bulduğum tek * güvenilir * yoludur sayısal bir Nesne Kimliği almak için ObjectID son satırda olacaktır: Grafik API'si: \t http://graph.facebook.com/{YOUR OBJECT ID} –

İlgili konular