Best way to get common "likes" from public info page out of your friends list - facebook

I'm trying to get a list of common likes (public) between a user and his friends. I thought this FQL query would work but I'm getting an unknown user error:
--get page_id that you have and any of your friends have
https://api.facebook.com/method/fql.query?query=
select uid, page_id from page_fan where uid in (SELECT uid2 FROM friend WHERE uid1 = me()) and page_id in (select page_id from page_fan where uid= me())
&access_token=ABC
I'm getting this error:
<error_response><error_code>1</error_code><error_msg>An unknown error occurred</error_msg></error_response>
Any suggestions?

It seems that the result set is way to big for the API to handle. Your best bet is to try to limit the result set by either query a set of friends against the user's like or query one, two ...etc pages at a time (if that also didn't work try to LIMIT your friends to say 100 to make sure you are actually getting something). Example of a query:
select uid, page_id
from page_fan
where uid in (
SELECT uid2
FROM friend
WHERE uid1 = me()
) and page_id in (
select page_id
from page_fan
where uid= me()
LIMIT 1
)
Obviously there is no offset in FQL. So first, you need to retrieve the user's likes and then query against them. You can always use the batch api to make multiple calls in a single batch call.

SELECT page_id from page_fan WHERE uid = me() and page_id IN ( SELECT page_id from page_fan WHERE uid = give one hid here )

Related

Facebook FQL getting all my friends last position update

I'm trying to get all my friend's last position update with this fql query:
SELECT author_uid, message, latitude, longitude, timestamp FROM location_post WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
I would like to take just the latest update for every friend but this query returns me more than one update for a single friend.
I tried to set a limit at the end of the query (equal to the number of my friends) but it does not work.
How I should change it?
If it was a normal database, not a facebook FQL, you could use join and get your results in single query. Unfortunately Facebook FQL does not allow joins or even max function.
But you can:
Receive all the friend ids like in your query
SELECT uid2 FROM friend WHERE uid1 = me()
Then for each friend uid run the query
SELECT author_uid, message, latitude, longitude, timestamp FROM location_post
WHERE author_uid = FRIEND_ID order by timestamp desc limit 1

Get places count of my friends

I want likes count, wall post count and places count of all my friends.
SELECT name ,likes_count, wall_count FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
This returning me list of all of my friends names with their total page likes count and wall post count
but i also need places count of all friends. I think facebook provide it directly like likes and wall post. As in profile we can see total places count just like likes count and friend count and mutual friends count. I have also tried this.
SELECT author_uid, checkin_id FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) OR tagged_uids IN (SELECT uid2 FROM friend WHERE uid1 = me()) LIMIT 5000
My idea was that i will get it and process it on my application end but it is not returning full list of checkins. How can i get all checkins of my friends with their ids so than i can calculate their total checkins ???
OR if there is a direct way of getting places count then it will be much efficient for my code ...
Don't use any LIMIT.
SELECT author_uid, checkin_id
FROM checkin
WHERE author_uid IN (
SELECT uid2 FROM friend WHERE uid1 = me())
OR tagged_uids IN (
SELECT uid2 FROM friend WHERE uid1 = me())
This works and gives me 737 checkins for all my friends. FQL doesn't have a COUNT function like in SQL, so you will have to enumerate checkins in the language of your choice.

Finding friends with specific job title

I'm trying to find all my friends with a specific job title, and no matter what I put in filter, it always return nothing
FQL query:
select name, work.position from user where work and uid in (select uid1 from friend where uid2 = me())
and work.position.id= 103141116410872

Facebook FQL multiquery on stream and user details

I am aiming to create a FQL query to retrieve all of my friends stream posts with their full name and email returned altogether. So I created a FQL multiquery (as below) but i keep getting empty result back (tried to put it in the Graph API Explorer):
"query1":"SELECT actor_id, message FROM stream
WHERE filter_key IN (SELECT filter_key FROM stream_filter WHERE uid = me())
AND actor_id IN (SELECT uid2 FROM friend WHERE uid1 = me())"
"query2":"SELECT uid, name FROM user WHERE uid IN (SELECT actor_id FROM #query1)"
Anyone get an idea how can I do this properly?
Does multiquery works in Graph API Explorer at all?
You need to provide the query as a JSON Object, you were missing the object notation ({...}) and a comma between queries.
This works:
{"query1": "SELECT actor_id, message FROM stream WHERE filter_key IN (SELECT filter_key FROM stream_filter WHERE uid = me()) AND actor_id IN (SELECT uid2 FROM friend WHERE uid1 = me())",
"query2":"SELECT uid, name FROM user WHERE uid IN (SELECT actor_id FROM #query1)"}

How to I get all the checkins a user is tagged in using FQL

Using the graph api it's possible to do:
https://graph.facebook.com/me/checkins
But how am I supposed to do it with FQL?
I tried this which suggests:
SELECT message FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
AND me() IN tagged_uids
but it doesn't return even a single result.
Thanks.
From what I can see, IN doesn't seem to work with me(). You have to first get the user id and assign this to a variable. This throws an OAuth exception:
SELECT message FROM checkin WHERE author_uid = me() OR me() IN tagged_ids
but if you set [UserId] to the current user's id, this works:
SELECT message FROM checkin WHERE author_uid = [UserId] OR [UserId] IN tagged_ids
You don't need to use the friend subquery. FQL will only return checkins that are visible to your user.
For this to work, make sure your access_token has both the user_checkins and friends_checkins permissions.
#cpilko gave a solution, but I've found another one, so I am adding it here as a reference for whoever reach this page:
SELECT id FROM location_post WHERE ([UserId] IN tagged_uids OR author_uid=me()) AND strpos(type,"checkin")>=0