How can I get all photos in one post using Graph API? - facebook

{
"id": "11882030_4952296803730",
"from": {
"name": "xxx",
"id": "11882030"
},
"message": "test",
"picture": "https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/408410_4952294483672_298434229_s.jpg",
"link": "https://www.facebook.com/photo.php?fbid=4952294483672&set=pcb.4952296803730&type=1&relevant_count=2",
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yx/r/og8V99JVf8G.gif",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/11882030/posts/4952296803730"
},
{
"name": "Like",
"link": "https://www.facebook.com/11882030/posts/4952296803730"
}
],
"privacy": {
"description": "Friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"place": {
"id": "471607792876974",
"name": "TTT",
"location": {
"street": "",
"zip": "",
"latitude": x,
"longitude": x
}
},
"type": "photo",
"status_type": "mobile_status_update",
"object_id": "4952294483672",
"application": {
"name": "Facebook for iPhone",
"namespace": "fbiphone",
"id": "6628568379"
},
"created_time": "2013-01-17T01:29:59+0000",
"updated_time": "2013-01-17T01:29:59+0000",
"comments": {
"count": 0
}
}
As above, I posted a status with two photos. I can get the first photo's thumb URL in picture and the relevant link & count information in link.
But how can I get each photo's specific URL?

FQL often provides more information than Graph API. You have to use the attachment parameter of the stream FQL table to get all the attached photos.
SELECT attachment FROM stream
WHERE source_id = me()
AND post_id="11882030_4952296803730"
Result:
{
"data": [
{
"attachment": {
"media": [
{
"href": "https://www.facebook.com/photo.php?fbid=471082296...",
"alt": "",
"type": "photo",
"src": "https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash3/5826...",
"photo": {
"aid": "4391039135",
"pid": "439104482145",
"fbid": 471507,
"owner": 102832,
"index": 1,
"width": 485,
"height": 172,
"images": [
{
"src": "https://fbcdn-photos-a.akamaihd.net/hph...",
"width": 130,
"height": 46
}
]
}
}
],
"name": "",
"caption": "",
"description": "",
"properties": [
],
"icon": "https://fbstatic-a.akamaihd.net/rsrc.phpjk.gif",
"fb_object_type": "album",
"fb_object_id": "4391044992857139135"
},
{
... //Photo 2
}
}
]
}

Based on Stéphane Bruckerts answer; you're after attachments. So I'd recommend simply requesting the attachments field in your graph request.

Although this question is a few years old, it still comes up when searching for this topic.
Facebook (Meta) Graph API has changed. Current Facebook (Meta) Graph API is version 13.0.
The best endpoint I found was to use the "/feed" URI slug, with "fields=attachments". Simply cURL / GET:
https://graph.facebook.com/v13.0/$PAGEID/feed?access_token=$AUTHTOKEN&fields=attachments,full_picture,id,message,story
Reference: https://developers.facebook.com/docs/graph-api/reference/v13.0/page/feed

Related

Facebook real time updates giving incomplete information on page events

I have subscribed for page subscription for Facebook real time updates with Fields as "feed". When i am creating a new event, the Facebook real time updates sends me a wrong entry. The entry i got as a real time update is below.
{
"entry": [
{
"changes": [
{
"field": "feed",
"value": {
"photo_id": 1128416807216170,
"**post_id": "902483569809496_1128416807216170"**,
"sender_name": "Unofficial: Aerospace Demodavid",
"sender_id": 902483569809496,
"item": "photo",
"verb": "edited",
"link": "https://scontent.ford1-1.fna.fbcdn.net/t31.0-8/13717445_1128416807216170_1696828468485436508_o.jpg",
"published": 1,
"created_time": 1470269376
}
}
],
"id": "902483569809496",
"time": 1470269377
}
],
"object": "page"
}
From the above entry, if i query the Graph API for postid : 902483569809496_1128416807216170 , i get the below JSON response
{
"created_time": "2016-08-04T00:09:36+0000",
"actions": [
{
"name": "Like",
"link": "https://www.facebook.com/902483569809496/photos/gm.713007008848308/1128416807216170/?type=3"
},
{
"name": "Comment",
"link": "https://www.facebook.com/902483569809496/photos/gm.713007008848308/1128416807216170/?type=3"
},
{
"name": "See Friendship",
"link": "https://m.facebook.com/friendship/902483569809496/713006992181643/"
}
],
"from": {
"name": "Unofficial: Aerospace Demodavid",
"category": "Aerospace/Defense",
"id": "902483569809496"
},
"icon": "https://www.facebook.com/images/icons/photo.gif",
"is_hidden": false,
"is_expired": false,
"link": "https://www.facebook.com/902483569809496/photos/gm.713007008848308/1128416807216170/?type=3",
"object_id": "1128416807216170",
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/13892116_1128416807216170_1696828468485436508_n.jpg?oh=967e908192fcadc72eae9c11047f87e2&oe=582D6009",
"privacy": {
"allow": "",
"deny": "",
"description": "",
"friends": "",
"value": "EVERYONE"
},
"status_type": "added_photos",
"subscribed": false,
"to": {
"data": [
{
"id": "713006992181643",
"name": "Stevie G Event"
}
]
},
"type": "photo",
"updated_time": "2016-08-04T00:09:36+0000",
"id": "902483569809496_1128416807216170"
}
But the actual thing added here was an event and not a photo. The id should be 902483569809496_713006992181643 as in the below JSON and not 902483569809496_1128416807216170 which came from the real time update. Below is the JSON response which i am getting when i query the Graph API manually using the account id without using the real time update information.
{
"id": "902483569809496_713006992181643",
"from": {
"name": "Unofficial: Aerospace Demodavid",
"category": "Aerospace/Defense",
"id": "902483569809496"
},
"story": "Unofficial: Aerospace Demodavid added an event.",
"story_tags": {
"0": [
{
"id": "902483569809496",
"name": "Unofficial: Aerospace Demodavid",
"type": "page",
"offset": 0,
"length": 31
}
],
"41": [
{
"id": "713006992181643",
"name": "Stevie G Event",
"type": "event",
"offset": 41,
"length": 5
}
]
},
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/c39.0.130.130/p130x130/13892116_1128416807216170_1696828468485436508_n.jpg?oh=5adc792bca82e0b110b3d6d98b81feae&oe=581E2680",
"link": "https://www.facebook.com/events/713006992181643/",
"name": "Stevie G Event",
"caption": "Stevie G Event",
"description": "Stevie G is the best",
"icon": "https://www.facebook.com/images/icons/event.gif",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/902483569809496/posts/713006992181643"
},
{
"name": "Like",
"link": "https://www.facebook.com/902483569809496/posts/713006992181643"
}
],
"privacy": {
"value": "EVERYONE",
"description": "",
"friends": "",
"allow": "",
"deny": ""
},
"type": "event",
"status_type": "created_event",
"object_id": "713006992181643",
"created_time": "2016-08-04T00:09:35+0000",
"updated_time": "2016-08-04T00:09:35+0000",
"is_hidden": false,
"is_expired": false
}
Why is there an inconsistency with the Facebook real time updates sent for an event creation. It treats it as a photo edit and not an event creation.
Please let me know if i am missing something.

facebook graph - retrieve multiple photos

I want to retrieve all photos that can be posted in a single Facebook post.
For example, in this post, there are two photos.
Using the Graph API (https://graph.facebook.com/v2.6/AtifAslamOfficialFanPage/posts?fields=id,type,created_time,link,message,source,object_id&limit=10&access_token=xxx) I get for this post:
{
"id": "182973122142_10153437154822143",
"type": "photo",
"created_time": "2016-03-18T17:47:23+0000",
"link": "https://www.facebook.com/AtifAslamOfficialFanPage/photos/a.281303247142.151444.182973122142/10153437154412143/?type=3",
"object_id": "10153437154412143"
}
but there is only one object_id, which is the first photo of the post.
Is it possible to retrieve all photos?
Request the attachments field, 182973122142_10153437154822143?fields=attachments, and you will get the following data structure:
{
"attachments": {
"data": [
{
"subattachments": {
"data": [
{
"media": {
"image": {
"height": 266,
"src": "https://scontent.xx.fbcdn.net/v/t1.0-9/s720x720/10314482_10153437154412143_7582591571482186627_n.png?oh=a2b350ce8ac6ae546022295c7e73245a&oe=579E6E12",
"width": 720
}
},
"target": {
"id": "10153437154412143",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/photos/a.281303247142.151444.182973122142/10153437154412143/?type=3"
},
"type": "photo",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/photos/a.281303247142.151444.182973122142/10153437154412143/?type=3"
},
{
"media": {
"image": {
"height": 720,
"src": "https://scontent.xx.fbcdn.net/v/t1.0-9/p720x720/10314505_10153437154507143_8615151666809542144_n.jpg?oh=4255fb5699cf0a4d5c455be82cbb8efe&oe=57E38281",
"width": 720
}
},
"target": {
"id": "10153437154507143",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/photos/a.281303247142.151444.182973122142/10153437154507143/?type=3"
},
"type": "photo",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/photos/a.281303247142.151444.182973122142/10153437154507143/?type=3"
}
]
},
"target": {
"id": "10153437154822143",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/posts/10153437154822143"
},
"title": "Photos from Atif Aslam's post",
"type": "album",
"url": "https://www.facebook.com/AtifAslamOfficialFanPage/posts/10153437154822143"
}
]
},
"id": "182973122142_10153437154822143"
}

facebook graph api post to page

I have a page in facebook as well as an app for it.
I have generated a never expire token for the page , and tried to post to the page using the graph api POST /me/feed
However, the messages i posted only appears if i query /me/feed in the graph api but not on the page wall. Why is this happening?
result for /me/feed
{
"id": "**********",
"from": {
"category": "Education",
"name": "**************",
"id": "**************"
},
"message": "ok",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/**********"
},
{
"name": "Like",
"link": "https://www.facebook.com/************"
}
],
"privacy": {
"description": "Public",
"value": "EVERYONE",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "status",
"status_type": "mobile_status_update",
"application": {
"name": **********",
"id": "************"
},
"created_time": "2015-02-01T05:26:29+0000",
"updated_time": "2015-02-01T05:26:29+0000"
},
{
"id": "825588500832993_846332195425290",
"from": {
"category": "Education",
"name": "************",
"id": "825588500832993"
},
"message": "asd",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/*************"
},
{
"name": "Like",
"link": "https://www.facebook.com/**************"
}
],
"privacy": {
"description": "Public",
"value": "EVERYONE",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "status",
"status_type": "mobile_status_update",
"application": {
"name": "**********",
"id": "**************"
},
"created_time": "2015-02-01T05:22:02+0000",
"updated_time": "2015-02-01T05:22:02+0000"
},
For anyone facing the same problem, go to developers.facebook.com-> your app -> settings-> fill up email , then go to status & review -> switch the off button to on to make it live

Why are object_id in photo table(fql) and object_id through graph api different?

I queried a page with due permissions for its feed. There was a post with three photos. The response json was:
{
"id": "some_id",
"from": {
"category": "Tv show",
"name": "some_name",
"id": "some_id"
},
"message": "New post with 3 photos",
"picture": "some_link",
"link": "some_link",
"icon": "some_link",
"actions": [
{
"name": "Comment",
"link": "some_link"
},
{
"name": "Like",
"link": "some_link"
}
],
"privacy": {
"description": "Public",
"value": "EVERYONE",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "photo",
"status_type": "mobile_status_update",
"object_id": "some_id",
"created_time": "2014-02-05T07:06:22+0000",
"updated_time": "2014-02-05T07:06:35+0000",
"likes": {
"data": [
{
"id": "some_id",
"name": "some_name"
}
],
"paging": {
"cursors": {
"after": "MTgyNDY2NjQ1MjM4MTc5",
"before": "MTgyNDY2NjQ1MjM4MTc5"
}
}
},
"comments": {
"data": [
{
"id": "some_id",
"from": {
"category": "Tv show",
"name": "some_name",
"id": "some_id"
},
"message": "With a comment and a like on it",
"can_remove": true,
"created_time": "2014-02-05T07:06:35+0000",
"like_count": 0,
"user_likes": false
}
],
"paging": {
"cursors": {
"after": "MQ==",
"before": "MQ=="
}
}
}
},
Firstly, I only got one object_id, whereas the post contained 3 photos. The object_id was of a single photo. I also queried through fql for object_id for that photo in photo table and the object_ids were not matching. Why is it so? What does object_id mean in both cases?
The Object ID for Posts will be different to the Object ID of the photos used in the post, as they are effectively different representations of the same thing. The id will be the ID of the page post, and the object_id will be the Album ID of the uploaded photos.
Try calling /{object_id}/photos to get the list of photos in the post.
A good way to test what each object_id represents is to go to http://www.facebook.com/{object_id} to see where it goes. It will either go to a page, post, album / media set, photo or an error page.

Not receiving some messages with status_type "shared_story" using FQL

I've been searching about this many hours since I saw I'm not receiving some of my friends posts in my app. I looked at the FQL documentation, searched through the Internet, but nothing.
I now that I can get them with the Graph API, asking for "feed" but I receive a lot of types of posts I don't need because of that I began to use FQL asking for "stream" where I can specify a few types (46 - Status update, 80 - Link posted, etc).
This type of posts are made in a wall of a person when he/she shares the status, photo or link another person posted in his wall, this is the "status_type": "shared_story".
Someone knows if it is possible to get them with FQL?
Thank you.
P.S.: Ok, this is crazy, I saw one post of this type that I get with FQL and I asked for feed using the Graph API and the type is the same "shared_story". But for some reason I don't understand I don't get all of them. Is there another parameter that could make the difference between them? Because I don't see it.
I'm not receiving this:
{
"id": "",
"from": {
"name": "",
"id": ""
},
"story": "",
"story_tags": {
"0": [
{
"id": "",
"name": "",
"offset": 0,
"length": 24,
"type": "user"
}
],
"32": [
{
"id": "",
"name": "",
"offset": 32,
"length": 18,
"type": "page"
}
]
},
"picture": "",
"link": "",
"name": "s",
"caption": "",
"properties": [
{
"name": "",
"text": "",
"href": ""
}
],
"icon": "",
"actions": [
{
"name": "Comment",
"link": ""
},
{
"name": "Like",
"link": "4"
}
],
"privacy": {
"value": ""
},
"type": "photo",
"status_type": "shared_story",
"object_id": "",
"application": {
"name": "Links",
"id": "2309869772"
},
"created_time": "",
"updated_time": "",
"likes": {
"data": [
{
"name": "",
"id": ""
}
],
"count": 1
},
"comments": {
"count": 0
}
}
But, I'm receiving this:
{
"id": "",
"from": {
"name": "",
"id": ""
},
"message": "",
"picture": "",
"link": "",
"source": "",
"name": "",
"caption": "",
"description": "",
"icon": "",
"actions": [
{
"name": "Comment",
"link": ""
},
{
"name": "Like",
"link": ""
}
],
"privacy": {
"value": ""
},
"type": "video",
"status_type": "shared_story",
"application": {
"name": "Links",
"id": "2309869772"
},
"created_time": "",
"updated_time": "",
"comments": {
"count": 0
}
}