In the Facebook API, how to find out which all your friends love a particular book or movie

I'm trying to figure out how to find how many of my friends love a certain entity.

For example, for a given book or film, how can I see how many my friends have already liked in the same book or film.

I believe that the information appears when we show the social plugin fb: like button, but I want to get this account so that I can programmatically display the most popular books among my friends, etc. in descending order.

My backend is php, but I also use the Javascript SDK. Thank you for your entries in advance.

+7
source share
1 answer

These "objects" are actually pages, so to get a friend list that looks like a movie or book (page), use this query:

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

Try fql.query in the console, it will be retrieved by all your friends who like the movie Inception.

EDIT:
An obvious way to get movies (for example) that your friends would like:

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

But I noticed that it will not return all users if the set is large (which, most likely, will be for each user). So I did a hack to get you started!

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

This code performs the following actions:

  • Get all the MOVIE IDs your friends like.
  • Remove duplicate results and divide the resulting array into a set of arrays (10 films each)
  • Request Facebook again to get friends for each set (10 movies at a time) who hopefully will bring you a full list of friends
  • sort by movie id

And the result will be something like this:

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

Here you can check your favorite ... etc.

PS: As I said above, just to get you started, and I think you can cache some queries and improve performance.

+15
source

All Articles