Getting user likes of stream items via FQL (posts, comments, pictures, links, etc)
Asked Answered
A

7

11

I need assistance in getting user likes of stream items via FQL. I've got some of the likes coming back, but cannot figure out how to get others. For the access_token, every permission is granted.


Let me show you what I've been able to do:

postings I've liked on Page feeds:

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT target_id FROM connection WHERE source_id=me() and is_following=1) AND likes.user_likes=1 LIMIT 10 Note: This worked as of mid Dec 2011 when the original question was posted. Now (mid Feb 2012) it is no longer returning anything liked stream content from a page.

postings I've liked of posts that I posted:

fql?q=Select post_id, source_id, message FROM stream where source_id=me() AND likes.user_likes=1 LIMIT 10


Here's what I'm missing

postings I've liked on friends' walls:

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT uid1 FROM friend WHERE uid2=me()) AND likes.user_likes=1 & LIMIT 5000

postings I've liked on events' walls:

????

postings I've liked on groups' walls:

????

Athens answered 13/12, 2011 at 22:14 Comment(0)
P
2

Here's what I've come up with, as of the time of posting (10-22-2012):

For friends/subscribedto/pages items:

SELECT likes, post_id, actor_id, target_id, message
FROM stream
WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me())
AND likes.user_likes=1 

OR

From 'like' table:

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

But post_id is always null and object_id doesn't exist sometimes when queried via the graph api (i.e. graph.facebook.com/OBJECT_ID )

For links/external objects - There is no direct way to get the facebook post details from this, but it returns a lot of results. Maybe with another query / multiquery looking for these urls in the stream or link tables.

SELECT url
FROM url_like
WHERE user_id=me()
Poison answered 22/10, 2012 at 16:45 Comment(0)
S
1

I found a solution using the Open Graph API. Hope this will help you also?

To perform this action you need the users read_stream permission.

Please let me know if my solution works for your requirements.

Because FQL will not be longer supported than V2.0, I would prefer using Open Graph API over FQL.

/*
*
*   Count my_user_id likes in wall of user "123"
*
*   ex: url = /123/posts
*   
*   setTimeout to avoid exceed api level rate limit, code 613
*/

function findMyLikes(url,my_user_id,count,callback) {
    console.log(url);
    FB.api(url, function (response) {
        if (response.data) {
            response.data.forEach(function (post) {
                //console.log(post);
                if (post.likes) {
                    post.likes.data.forEach(function (like) {
                        if (like.id == my_user_id) {
                            count++;
                        }
                    });
                }
            });
        }

        if (response.paging && response.paging.next) {
            setTimeout(function() {findMyLikes(response.paging.next,my_user_id,count,callback)},1000);
        } else {
            callback(count);
        }
    });

};

I noticed that this solution may take some time, if your are analyzing very long feeds. For this issue I have still an open question pending : Getting all likes from a specific user on a news wall with fewer graph API calls https://codereview.stackexchange.com/q/58270/50013?sem=2

Stream answered 13/8, 2014 at 17:1 Comment(0)
B
0

@Jeff Sherlock, a partner engineer at Facebook, says here that 'you cannot pull all of the likes of a person using the fb platform. We limit it to actors, movies, sports teams, etc. for privacy reasons.' I know it doesn't make much sense since you can query all kinds of other stuff with the Facebook API. I would suggest you pic Ashton Kutcher and try to query on his like table... Wait, you need his permission ; ]

Beefcake answered 11/1, 2012 at 21:5 Comment(4)
"I would suggest you pic Ashton Kutcher and try to query on his like table... Wait, you need his permission" I'm not trying to query anyone's like table other than that of an authenticated user who has accepted every permission possible. This app, I inherited, allows a user to like/unlike stream items in Facebook. It doesn't currently store this because they envisioned that Facebook would be able to return that data. Now that it's been handed over to me, it is starting to appear that we will have to store the like on our side when a user likes something via our UI.Athens
The suggestion with Ashton Kutcher was just a bit of fun - sry. My real suggestion is: Stick to your plan and store the users and their likes in your database.Beefcake
I didn't provided enough context in my answer. I've updated the answer to make more sense. I'm referring to open graph objects a person has liked. If you go to cnn.com and "like" an article, we don't return that in the likes endpoint in the Graph API.Jolty
How would I get my own likes of friend's stream items (photos, posts, etc) via FQL? Or my own likes of event stream items? I can get my own likes for page's stream items and my own likes of my own stream items.Athens
V
0

The problem is that the like table returns a blank post_id for everything. However, it does return an object_id for your likes.

You can put all these object_ids in a comma separated string, then submit a graph API call with ?ids=objectid1,objectid2,objectid3 etc.

This will then return all the objects that it finds. This way you can get the likes for stream items.

It seems to go about 4 weeks back. I can't seem to make it go any further back than this.

As an aside, one thing you will find is that liked comments are also returned as object_ids in the like table. However, there does not appear to be any way at all to find out the object details of these object_ids. Bit of mystery with these ones.

Vandavandal answered 13/2, 2012 at 6:24 Comment(1)
Ah, interesting. I'm going to research this further.Athens
S
0

If you read the like table documentation, post_id field has a note which reads :

These post IDs must be queried from the stream FQL table.

Hence when you compare post_id like post_id<>"", it won't return you anything as default result contains blank post_ids. And it seems when you run below query :

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

It returns the pages liked by user and some other stuff but not the feed posts.

As you already want to get likes from stream table, you just want to get post_id from stream table. To get post_id of NewsFeed for a given day, you might want to try below query.

SELECT post_id
FROM stream
WHERE filter_key IN (
    SELECT filter_key
    FROM stream_filter
    WHERE uid=me()
    AND type='newsfeed'
)
AND is_hidden = 0
AND description<>''

You might want to use Limit and Created_time fields to get more no. of posts. And once you use above query in Multi-query to get likes for the user, you'll definitely get likes for a given day.

Sindhi answered 18/2, 2012 at 18:34 Comment(1)
Please read my edits about the like table no longer being my question as it's very obvious that facebook has removed the ability to get that information. Please read my working examples of what I can get. As a matter of fact I'm going to edit my question so it is more clear as to what I need as I've not quite got it worded correct as your answer as well as the other peoples answers tell me I have it misworded.Athens
S
-1
SELECT post_id, actor_id, message, type, permalink, attachment, likes, 
    comments, description, updated_time, created_time
FROM stream 
WHERE filter_key in (
        SELECT filter_key 
        FROM stream_filter 
        WHERE uid=me() AND type='newsfeed'
)

just change type on your requirement

Starveling answered 20/7, 2012 at 12:15 Comment(1)
Can you tell me, Ajit, which likes your query will return?Athens
C
-2

This is not possible with the GraphAPI. The GraphAPI will allow you to see the pages that a user has liked with /me/likes, but it will not give you a list of all the items posted to the user's wall that they haved liked.

You can see details on this in the Facebook Documentation.

I have no experience with FQL as listed in your question, but a Stack Overflow question seems to provide an answer to your question.

See: Facebook API - "All my likes" query

Worked perfectly in testing.

Ceroplastics answered 10/1, 2012 at 23:31 Comment(2)
As noted in my question, I can get three sub-sets of likes by using FQL (FQL is accessible using the Graph API, try for yourself in the graph API explorer). I just need to get the 2 missing sets of likes as I have documented in the question.Athens
Did you get a chance to try the three queries that actually do return liked stream items? FWIW, the me/likes I've already documented in the original question as to returning pages and other objects...just not stream items that have been likedAthens

© 2022 - 2024 — McMap. All rights reserved.