Getting which users shared a post - facebook-graph-api

With the graph api, when I query for the feed of a user or page, there are some posts that have been shared by users, and I can see the data about the number of shares within the data section of one entity:
"shares": {
"count": 2
},
When browsing facebook, on that post, when I click on the icon that represents "show shares", something pops up that lets me see some users that shared the post, according to the comment "You can see only shares that are public or from friends."
So is there a way to get the user data from the shares with the graph api?

The API doesn't provide information about users who have shared a post / link. Its probably something they will add in the future, but it's not possible at the moment. Your best bet for this information is to scrape the UI to get this information, but you will run into lots of issues and it's probably not worth the effort.
Facebook does give information on who Likes and Comments on posts however, if its any consolation.

Related

In general how are likes and recommendations usually handled on sites like Reddit, YouTube, and Facebook?

For example when you hit the like / upvote button it affects the future recommendations you receive.
At a high level how do sites determine all of this information?
Every time you hit the like/dislike button does it automatically make a call to the backend and update your recommendations list?
Or does it wait a bit before it does that in case you hit like by accident? What would happen if you just spam and keep liking and unliking a particular video or post?
this is done by many ways:
FaceBook:
1- when you stay reading the post for a long time or hit like, then you are
interested about the content that is offered in this post.maybe in the database there are categories for the data related to posts and offers according to it. also facebook has strong backend which can analyze photos and according to it's data, it may save it in the DB. this is done by image recognition using python. most people also allow facebook accessabilty for apps on their phones, this allows facebook to collect data about your interests. recommendations also based on your FB data, like age, location, friends and other data. when you admire something, the next time you refesh or opens facebook, a call to backend is made and then it returns data according to some cases according to user data and specifications.
Reddit
this mostly depends on text analysis because it is mostly reading posts. and by the same way like facebook it shows data
YouTube
here it maybe a little bit different because here the backend will analyze the videos you watch, channels, and other videos related json data (if you have dealed with yt_dl you will understand me)
you asked about when will the user preferences be updated?. i think this is done when you refresh or open the app again

Facebook opengraph insights api on specific post id from my app

I want to build a dashboard that returns more customized insights from the insights generated by app.
The app is a facebook connect website that users visit and view a list of products. They can post to facebook about that particular product by sharing a custom story that incorporates that product on their timeline.
When I go to the insights for my app, it does a great job of showing me all social impressions for all custom stories that were generated on my site.
I'd like to narrow that down even more for specific products.
My plan is to record the object ids that are generated by these actions and link them to a partucular product in my database.
I'd then like to create a new dashboard page that will allow me to login, request read_insights permission from me and then use that object_id:product mapping from my database to show how many social impressions where recorded for a given product's object_ids.
Is this possible? I've read alot about it but still haven't found the most elegant way to get a segmented report of social impressions per type of content that was posted.
Thanks for your time.
The implementation all depends on which platform you want your app to run on.
The first major component is you must have a Facebook developers account which is easy to signup for. Just go to developers.facebook.com and register. Takes like 2 mins. After that you will need to create your first app and add the correct domain name where your app will be hosted and what platform it will run on. (iOS, Android, Web, ect.) Once that is finished you can make your app public so you can use the Facebook API in your code.
For the app creation itself. The first thing you need to do is import the correct API for your platform. Which you can find a walk through at https://developers.facebook.com/docs/. Once the API is imported you must build a Facebook object which contains your app id and possibly app secret. If you're using JavaScript you don't want to use the app secret because it will be visible to the public.
Now that you have your Facebook object you must require the app users to log in and grant permission to your app. You can add extended permissions to your log in process by adding a scope value to the log in button generated by Facebook. Here is an example.
<fb:login-button id="loginBtn" max_rows="1" scope="basic_info,read_insights,manage_pages" size="medium" show_faces="false" auto_logout_link="true"></fb:login-button>
After the user is logged in you can now query information from the users account using Facebook Api calls to Social Graph. Facebook also provides a tool to help you figure out what information you can query. https://developers.facebook.com/tools/explorer
Everything else you want to do with the app can be done by Facebook API calls. You just need to insure you grant the user the correct permissions before making the API calls.
API calls are a little different depending on which language syntax you are using but they all follow the same data model and return some array of responses which can be parsed using JSON or the standard array format. The Graph Explorer tool listed above will show you the output for your queries so you can handle them accordingly.
I hope this helps gets you started.
EDITED
Here's the implementation in JavaScript
function getMetric(){
// make the API call
FB.api(
"/{app-id}/insights/application_opengraph_story_impressions",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
}
Here's the reference now that Facebook docs are back up https://developers.facebook.com/docs/graph-api/reference/insights
application_opengraph_story_impressions will probably give you the total impression of all stories made by your app. I ran it against my Facebook app and it came back empty but I don't have any stories so it might work with your's. Also to note in the documentation there is an * by this metric and I could't find what that means.
I'm pretty sure that right now Facebook don't give developers ability to get insights about app custom stories.
Currently Facebook documentation has the following Graph APIs for Insights data:
/{page-id}/insights
/{app-id}/insights
/{domain-id}/insights
/{post-id}/insights (where this is a Page post)
So /{post-id}/insights won't work because custom story is actually user's post and others endpoints don't apply to your case.
As far as I know the only other option to access Insights is FQL. For that you'd use insights table in a manner similar to this:
SELECT ... FROM insights WHERE object_id = ... AND metric = ... AND end_time = ... AND period = ...
Now most likely this also won't work with your custom story posts (I don't have posts which I could try it on right now, so I can't tell) but at least it is not explicitly stated so in the documentation, so you should probably try it out.
UPDATE:
I wasn't able to get any insights data via FQL, although as far as I understand the following code should have gave me at least something (object id is for my page):
SELECT breakdown, end_time, event, metric, object_id, period, value FROM insights WHERE object_id = 224981264214413 and metric = 'page_fans' and period = period('lifetime') and end_time = 1395597892
But it results just in
{
"data": []
}
Facebook also has some pretty old bug report about similar topic: https://developers.facebook.com/x/bugs/508088155954330/ where they confirmed the issue, assigned it, and... did nothing to fix it for 6 months.
In case FQL doesn't work, my suggestion to you is - use your own analytics code to track the creation of custom stories and get the friend count of the users. It won't show you the real exposure of the posts but at least you will see some data on which types of custom stories where posted more often and what was the maximum potential friend count that could have seen them. By the way - to make charting easier, you could use Google Analytics events for that.

How to count all likes no matter how many times a post is shared and reshared?

I want to be able to count the total number of likes for a post or photo no matter how many times the post has been shared and reshared.
I want to know how popular a post is across the whole Facebook Universe.
Is this even possible?
This is not fully possible, for these reasons:
Facebook does not indicate via the API whether a post is a re-share
of another post (there is no "via" property on Post objects, in
other words). Nor is there a property that indicates where or how
many times a particular post has been re-shared.
Many posts on Facebook use privacy settings set by the user creating the post, and
this applies to re-shared stories as well. Your app has access to
whatever its users give it permission to read, but that does not
grant it access to the feeds of all users on Facebook.
At most, you could theoretically do this (although I am not sure if there are other limitations in place to prevent this):
Search all PUBLIC posts on Facebook, for text that matches the text in the post you want to track. (see the documentation under "Searching" here: http://developers.facebook.com/docs/reference/api/). Aggregate the Likes for all of these posts. Just understand that this is only the subset of posts that your app is capable of viewing.

Facebook API Likes Not Accurate?

Checking to see if anyone here can help - I have a bunch of users on my site having this problem..
Testing my own account after getting failure issues from several of my website's members, I discovered that Likes are not being recorded accurately to my profile. While logged in, I liked a page (this is just an example, the same problem happens on multiple pages). It was:
http://www.imdb.com/name/nm1869946/
If I look this page up with FQL or on the Graph API Explorer, I can find the ID for this is:
10150237928985504
If I look at my list of Likes, by going to graph.facebook.com/me/likes it does not show up.
When I enter this in the Graph API Explorer:
me/likes/10150237928985504
I get:
{
"data": [
]
}
HOWEVER - if I go to my Facebook Profile I can see the Like there. The page has been added to my news feed and the link shows up in my list of Likes.
So why is the fact that I Liked the page not available via the Graph API or FQL?
Thanks very much!

Can we get People Talking About This for a post?

Is there a way to get the "People Talking About This" statistic for a specific post on a Facebook Page ? The Insights API doesn't say it's possible. ( post_storytellers doesn't exist )
'People Talking About This' aggregates various interactions into a single metric including:
liking a Page
posting to a Page’s Wall
liking, commenting on or sharing a Page post (or other content on a page, like photos, videos or albums)
answering a Question posted
RSVPing to an event
mentioning a Page in a post
phototagging a Page
liking or sharing a check-in deal
or checking in at a Place.
As far as i'm aware there's no way to retrieve this value using the graph api without scraping the page directly.
You can however retrieve the total_count for a url which is an aggregation of shares, likes, comments via FQL, for example: https://graph.facebook.com/fql?q=SELECT%20total_count%20FROM%20link_stat%20WHERE%20url='https://www.stackoverflow.com'
more info: https://developers.facebook.com/docs/reference/fql/link_stat