在Facebook图形API中如何找到所有朋友喜欢的特定书籍或电影

Gub*_*ooo 7 facebook facebook-fql facebook-graph-api

我正在试图弄清楚如何找到我的朋友中有多少人喜欢某个特定的实体.

例如,对于给定的书籍或电影,我如何查看有多少朋友已经喜欢同一本书或电影.

我相信当我们显示fb时会出现信息:像按钮社交插件,但我想得到那个数,所以我可以编程方式显示我朋友之间最受欢迎的书籍等降序排列.

我的后端是PHP,但我也使用Javascript SDK.感谢您提前投入

ifa*_*our 15

这些"对象"实际上是页面,因此要检索像电影或书籍(页面)这样的好友列表,请使用以下查询:

SELECT uid FROM page_fan WHERE page_id = 91290503700 AND uid IN (SELECT uid2 FROM friend WHERE uid1=me())
Run Code Online (Sandbox Code Playgroud)

fql.query的控制台中尝试这个,它将检索所有喜欢Inception影片的朋友ID.

编辑:
检索你的朋友喜欢的电影(例如)的显而易见的方法是:

SELECT page_id,uid 
FROM page_fan 
WHERE type="MOVIE" 
AND uid IN (
    SELECT uid2 
    FROM friend 
    WHERE uid1=me()
)
Run Code Online (Sandbox Code Playgroud)

但是我注意到如果设置很大(很可能是每个用户的情况),它不会返回所有用户..所以我做了一个黑客只是为了让你开始!

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);
Run Code Online (Sandbox Code Playgroud)

此代码执行以下操作:

  1. 获取您朋友喜欢的所有MOVIE ID
  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
        )
)
Run Code Online (Sandbox Code Playgroud)

从这里,你可以检查最喜欢的...等

PS:正如我上面所说,只是为了让你开始,我想你可以缓存一些查询并提高性能.

  • 非常感谢 - 我不能要求更好的解决方案 - 真的很感谢你投入的时间来帮助我.再次感谢 (3认同)