post photo to friend wall through graph api - php

I'm trying to post a photo to one of friends wall using the new graph api. For this I have the following code:
$attachment = array(
'message' => 'Posted a photo',
'source' => '#' . realpath(PATH_TO_MY_PHOTO)
);
$facebook->setFileUploadSupport(true);
$facebook->api('/'.$id_friend.'/feed?access_token='.$access_token, 'post', $attachment);
The problem is that the picture is not uploaded. I mean, it only post the message without any picture. This does not work either if I try to post on the current user wall.
Does anyone have any idea on how to achieve this ? Thanks.
p.s. I'm requesting only publish_stream permission

In order to post a poto to a users wall, as in publishing a photo and not a stream story,
you can post to here:
http://graph.facebook.com/ALBUM_ID/photos.
for more information visit facebook's graph api photo documentation.

You should replace "source" with "picture".
$imagepath='http://site.com/pic.jpg';
$attachment = array(
'message' => 'Posted a photo',
'picture' => $imagepath
);
$facebook->setFileUploadSupport(true);
$facebook->api('/'.$id_friend.'/feed?access_token='.$access_token, 'post', $attachment)
You can optionally add some more fields. for more details:
https://developers.facebook.com/docs/reference/api/post/

Related

Facebook API: Upload photo becomes album instead of single post

I'm working with facebook API that enable user to upload a photo and give caption(like instagram).
Here is my code to upload photo:
$request = (new FacebookRequest( $session, 'POST', '/me/photos', array(
'message' => $caption,
'url' => $img_url
) ) )->execute();
$result = json_decode($request->getRawResponse(), true);
If I uploaded more than one photo in the close time, the photos will be grouped in an album instead of a single post.
And facebook will return previous post id, instead of facebook post's id that I have just uploaded.
Is it normal behaviour? Does anyone know how to fix the photo id?

How do I can post a multiple photos via Facebook API

Now I posting a single photo to wall like this:
$response = $facebook->api("/$group_id/photos", "POST", array(
'access_token=' => $access_token,
'message' => 'This is a test message',
'url' => 'http://d24w6bsrhbeh9d.cloudfront.net/photo/agydwb6_460s.jpg',
)
);
It works fine, but can I somehow post a multiple photos, something like this:
You can now publish multiple images in a single post to your feed or page:
For each photo in the story, upload it unpublished using the {user-id}/photos endpoint with the argument published=false.
You'll get an ID for each photo you upload like this:
{
"id": "10153677042736789"
}
Publish a multi-photo story using the {user-id}/feed endpoint and using the ids returned by uploading a photo
$response = $facebook->api("/me/feed", 'POST',
array(
'access_token=' => $access_token,
'message' => 'Testing multi-photo post!',
'attached_media[0]' => '{"media_fbid":"1002088839996"}',
'attached_media[1]' => '{"media_fbid":"1002088840149"}'
)
);
Source: Publishing a multi-photo story
You can make batch requests as mentioned here: https://stackoverflow.com/a/11025457/1343690
But its simple to loop through your images and publish them directly.
foreach($photos as $photo)
{
//publish photo
}
Edit: (regarding grouping of photos on wall)
This grouping is done by facebook automatically if some photos are uploaded into the same album.
Currently you cannot create an album in a group via Graph API - it is not supported (as of now), see this bug.
But you can do this - create an album manually, then get the album_id by-
\GET /{group-id}/albums, then use the the code with album_id instead of group_id-
foreach($photos as $photo){
$facebook->api("/{album-id}/photos", "POST", array(
'access_token=' => $access_token,
'name' => 'This is a test message',
'url' => $photo
)
);
}
I've tested it, see the result-
Actually you can upload a multi story photo(I did it using Graph Api and PHP) but the problem comes if you need scheduled this post.Your post is schedule but also it shows on the page's feed.
P.S. I'm using Graph Api v2.9
PHP Code
$endpoint = "/".$page_id."/photos";
foreach ($multiple_photos as $file_url):
array_push($photos, $fb->request('POST',$endpoint,['url' =>$file_url,'published' => FALSE,]));
endforeach;
$uploaded_photos = $fb->sendBatchRequest($photos, $page_access_token);
foreach ($uploaded_photos as $photo):
array_push($data_post['attached_media'], '{"media_fbid":"'.$photo->getDecodedBody()['id'].'"}');
endforeach;
$data_post['message'] = $linkData['caption'];
$data_post['published'] = FALSE;
$data_post['scheduled_publish_time'] = $scheduled_publish_time;
$response = $fb->sendRequest('POST', "/".$page_id."/feed", $data_post, $page_access_token);
$post_id = $cresponse->getGraphNode()['id'];
You will need to upload each photo first with published state to false, and then use the ID's of the unpublished photos to the /me/feed endpoint to schedule the photo. The schedule needs to be within the 24 hours from the time the photos are uploaded as facebook deletes all unpublished photos in 24 hours.
Ref:
https://developers.facebook.com/docs/graph-api/photo-uploads/
There is no way to publish more than one photo in the same graph API call.
See documentation: https://developers.facebook.com/docs/graph-api/reference/user/photos

Posting to wall users use token

I have php code that posting in the wall of the user that use in my app. But in the post write
"post by _" (My app name).
Code:
$fql_info = $facebook->api($fql_query);
if($fql_info[0][offline_access] == 1)
{
$attachment = array(
'message' => "",
'name' => u("ghfhgfhfgh"),
'description' => u("fghgfhgfh"),
'link' => LINK,
'picture'=> "http://gfhgfhgfhfh"
);
$facebook->api('/'.$f[uid].'/feed', 'POST', $attachment);
$abc.=$f[uid]."\n";
echo $f[uid]."-".$fql_info[0][offline_access]."\n";
}
I want to know how I can to post but without my app name. User as poster itself, not the application has released it.
is it possible?
I guess it's not possible. The app name will appear in the post.
Sorry to say but i don't think this is possible . Facebook would not allow us to do that , it will always say Posted via : [Your APP name]

tagging a page in photos

Greetings
Here's what's up:
I'm working on an app where the user or a page they administrate is tagged in their own image, however, tagging a page they administrate doesn't function, I have no trouble with the user being tagged.
Here's some code:
$tdata = array('tag_uid' => $fb_id,'x' => 0,'y' => 0);
$datatags[] = $tdata;
$attachment = array(
'access_token' => $access_token,
'tags' => $datatags
);
$attachment['image'] = '#'.realpath($image_name.);
$result = $facebook->api('/'.$album_id.'/photos', 'POST', $attachment);
$fb_id is either the ID for the user or the page. which is grabbed using /me/accounts in the Graph API
Thanks!
Per the documentation you cannot do this:
You can specify which user to tag using two methods: in the URL path
as PHOTO_ID/tags/USER_ID, or in a URL parameter as
PHOTO_ID/tags?to=USER_ID. Currently, you cannot tag a Page in a photo
using this API.
https://developers.facebook.com/docs/reference/api/photo/

FB upload photo from application and post it to user's wall

I have a problem regarding the Facebook API. I've created an application "Screenshot Submission", from the concept of submitting the screenshot, the scenario is:
After the users allows my application.
The user will select a file to upload on the application using form then submit it.
I want to upload the selected file(image/photo) to his/her album(auto generated from application) and post the file(image/photo) to his/her wall.
$photo_details = array('message'=>$_REQUEST['arttitle'],'source'=> '#' . realpath($_FILES[file]tmp_name]));
$facebook->api('/me/photos','POST',$photo_details);
The above code will upload photo to the autogenerated album, and returns an array like:
Array([id]=1234567890)
Now, how can post the uploaded file(image/photo) to his/her wall using php.sdk and graph api.
Any help would be appreciated. Thanks.
First take the extended permission of publish_stream. Then the following code will help to upload the photo to wall
$attachment = array(
'message' => 'The message that you want to display with picture',
'name' =>'Your Application Name',
'caption' => "Caption Under the picture",
'link' => 'http://apps.facebook.com/yourapplication/',
'description' => 'Some description with picture about picture or your application',
'picture' => 'http://www.yoursite.com/somefolder/images/'.$Picturetoupload,
'method'=>'stream.publish',
'actions' => array(
array(
'name' => 'Your Application Name',
'link' => 'http://apps.facebook.com/Yourapplicationlink/'
)
)
);
$uid=$fbme['id']; // id of the user
$result = $facebook->api('/'.$uid.'/feed/','post',$attachment);
After uploading the photo, you will get the "object_id of the photo" in return.
Make a post to facebook wall with "object_attachment = 'object_id of the photo'"
curl -F \ "access_token=..." \
-F "message=blah blah...."
-F "object_attachment=object_id of the photo" \
"https://graph.facebook.com/me/feed
more info in http://developers.facebook.com/docs/reference/api/user/ posts section.
object_attachment:Facebook ID for an existing picture in the User's photo albums to use as the thumbnail image. The User must be the owner of the photo, and the photo cannot be part of a message attachment.

Categories