2011-06-23 24 views
8

Tôi bị nhầm lẫn bởi phương pháp fql.multiquery của Facebook.Tôi làm cách nào để sử dụng kết quả từ FB FQL multiquery?

Tôi đang cố truy xuất tất cả các nhận xét về bài đăng và sau đó là thông tin người dùng cho từng bài đăng. Tôi có thể nhận được các nhận xét mà không gặp bất kỳ sự cố nào, nhưng tôi gặp sự cố khi tải người dùng.

Hiện nay tôi đang sử dụng như sau:

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

này mang lại cho tôi câu trả lời sau đây:

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

Vấn đề là, tôi không biết làm thế nào để phù hợp với những lên! Vì vậy, tôi đang lặp qua các ý kiến, và muốn in văn bản của mỗi một với tên của người dùng bên cạnh nó. Làm thế nào để làm điều đó?

Hoặc, có cách nào tốt hơn để thực hiện việc này không?

Trả lời

10

Bạn có thể đối sánh các kết quả này bằng cách lặp lại các nhận xét và so khớp từ đó với id từ phản hồi của người dùng.

Ví dụ:

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

Cảm ơn bạn, đó chính xác là những gì tôi cần! Bạn đã thực sự giúp tôi - cảm ơn một lần nữa. – Sharon

+0

Không sao cả. REST API cũ đôi khi có thể gây nhầm lẫn. –

+2

Tôi không thể tin rằng loại công cụ này được tô đậm trong tài liệu của Facebook. Cảm ơn bạn! – Warpling

0

Nếu bạn đang làm việc với PHP và cần một mảng duy nhất của ý kiến ​​để lặp qua chức năng này có thể có ích:

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

Trả về một mảng duy nhất của nhận xét với chú thíchID là khóa:

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

Lưu ý: bạn phải chuyển đối tượng * số * objectID để làm việc này 100%. Nếu bạn là đối tượng là một trang web, URL * có thể * hoạt động, nhưng không phải lúc nào tôi cũng phát hiện ra. Tốt hơn để có được một ObjectID số thông qua Trình gỡ lỗi đối tượng: http://developers.facebook.com/tools/debug/og/object?q={YOUR URL TẠI ĐÂY} Đây là cách * đáng tin cậy * duy nhất tôi tìm thấy để lấy ID đối tượng dạng số. ObjectID sẽ ở dòng cuối cùng: API biểu đồ: \t http://graph.facebook.com/{YOUR ID đối tượng} –

Các vấn đề liên quan