2011-02-15 71 views
7

我試圖找出如何找到多少朋友喜歡一個特定的實體。在Facebook的圖形API如何找到所有的朋友們都喜歡某本書或電影

例如,對於一個給定的書或電影,我怎麼可以看一下有多少朋友已經喜歡同一本書或電影。

我相信,當我們顯示FB信息確實出現了:像按鈕社交插件,但我希望得到那個數,所以我可以編程我的朋友等爲降序中顯示最流行的書籍。

我的後臺是PHP的,但我也使用Javascript SDK。 感謝您輸入事先

回答

15

這些「物」實際上是網頁,因此檢索您的好友列表,像一部電影或者一本書(頁),使用此查詢:

SELECT uid FROM page_fan WHERE page_id = 91290503700 AND uid IN (SELECT uid2 FROM friend WHERE uid1=me()) 

試試這個在fql.query的控制檯中,它將檢索喜歡Inception電影的所有朋友ID。

編輯:
檢索電影最顯而易見的方法(例如),你的朋友喜歡的是:

SELECT page_id,uid 
FROM page_fan 
WHERE type="MOVIE" 
AND uid IN (
    SELECT uid2 
    FROM friend 
    WHERE uid1=me() 
) 

但我注意到,它不會返回所有用戶如果設置很大(對每個用戶來說最有可能的情況下)..所以我做了一個破解只是爲了讓你開始!

function sectionArray($array, $step) { 
    $sectioned = array(); 

    $k = 0; 
    for ($i=0;$i < count($array); $i++) { 
     if (!($i % $step)) { 
      $k++; 
     } 
     $sectioned[$k][] = $array[$i]; 
    } 
    return $sectioned; 
} 

$result = $facebook->api(array(
    "method" => "fql.query", 
    "query"  => "SELECT page_id FROM page_fan WHERE type='MOVIE' AND uid IN (SELECT uid2 FROM friend WHERE uid1=me())" 
)); 
$pages = array(); 

foreach($result as $k=>$v) { 
    $pages[] = $v["page_id"]; 
} 

$pages = array_unique($pages); 
$pages = array_values($pages); 
$sets = sectionArray($pages,10); 

$movies = array(); 
foreach($sets as $set) { 
    $page_set = implode(',',$set); 
    $friends = $facebook->api(array(
     "method" => "fql.query", 
     "query"  => "SELECT page_id,uid FROM page_fan WHERE page_id IN ($page_set) AND uid IN (SELECT uid2 FROM friend WHERE uid1=me())" 
    )); 
    $movies[] = $friends; 
} 

$final = array(); 
foreach($movies as $v) 
    foreach($v as $k=>$arr) 
     $final[$arr["page_id"]][] = $arr["uid"]; 
print_r($final); 

此代碼執行以下操作:

  1. 獲取所有的電影IDS,你的朋友喜歡
  2. 刪除重複的結果,並劃分產生的陣列到陣列集(10部電影每個)
  3. 再次查詢Facebook以獲得每組的朋友(每次10部電影),這將有望讓你的朋友的完整列表
  4. 排序影片ID

其結果將是這樣的:

Array 
(
    [movie_id] => Array 
     (
      [0] => friend_id 
      [1] => friend_id 
      [2] => friend_id 
      [3] => friend_id 
     ) 

    [movie_id] => Array 
     (
      [0] => friend_id 
      [1] => friend_id 
      [2] => friend_id 
      [3] => friend_id 
      [4] => friend_id 
      [5] => friend_id 
      [6] => friend_id 
      [7] => friend_id 
     ) 

    [movie_id] => Array 
     (
      [0] => friend_id 
     ) 

    [movie_id] => Array 
     (
      [0] => friend_id 
     ) 
) 

從這裏,你可以檢查最喜歡...等

PS:由於我說上面只是爲了讓你開始,我想你可以緩存一些查詢和提高性能。

+0

感謝ifaour - 感謝你的幫助。我試圖嘗試的是 - 對於給定的類別說「電影」 - 是否有可能根據喜歡的人數只顯示前10名熱門電影**我的朋友** - 所以我不會有電影ID - 它應該基於類別,並且對於給定類別,根據朋友的** LIKES **的數量顯示前10種流行歌曲或電影或書籍。非常感謝 – Gublooo 2011-02-16 08:18:16

相關問題