In the new PHP SDK is there any way to post to a friends wall?
I have seen several apps do it. Like apps that say "your friend asked you a question", and I'm not even a user of that app. Is there any way to do it?
I am using an FBML canvas. I already have all the users friends, just need to figure out how to post to the friends they select from the list.
Thanks
You can use the facebook api method below, this works with the 3.1.1 SDK:
$publishStream = $facebook->api("/$user/feed", 'post', array(
'message' => "Your Message",
'link' => 'http://example.com',
'picture' => '',
'name' => 'App Name',
'description'=> 'App description'
));
Just replace the $user variable with the user id of your friend.
Yes, as long as you have the publish_stream extended permission
Enables your application to post
content, comments, and likes to a
user's stream and to the streams of
the user's friends, without
prompting the user each time.
As far as publishing goes
http://developers.facebook.com/docs/api#publishing
Related
I can't find an example of exactly what I'm trying to do, so sorry if this is a repeated question, but I have looked for the last couple of hours.
I want my Facebook app to be able to update a status or post to a wall of a page that I administrate: http://www.facebook.com/amazingjobsapp as part of a CRON job.
I just can't seem to find any examples on how to do this. Any pointers are greatly appreciated.
EDIT:
I've used to code below and now am getting:
object(FacebookApiException)#11 (8) { ["result":protected]=> array(1) { ["error"]=> array(3) { ["message"]=> string(72) "(#200) The user hasn't authorized the application to perform this action" ["type"]=> string(14) "OAuthException" ["code"]=> int(200) } } ["message":protected]=> string(72) "(#200) The user hasn't authorized the application to perform this action" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(86)
Can someone walk me through granting my app manage_page and publish_stream permissions for page id 413282938687554 please?
EDIT 2: If I look at my graph.facebook.com/me/accounts then it shows the page id above with an access token but if I use that in my code then I still get the error.
You need to get the manages_pages permission
<?php
$attachment = array(
'message' => 'this is my message',
'name' => 'This is my demo Facebook application!',
'caption' => "Caption of the Post",
'link' => 'http://mylink.com',
'description' => 'this is a description',
'picture' => 'http://mysite.com/pic.gif',
'actions' => array(
array(
'name' => 'Get Search',
'link' => 'http://www.google.com'
)
)
);
// To authenticated user's wall
$result = $facebook->api('/me/feed/', 'post', $attachment);
// To page's wall
$result = $facebook->api('page-id/feed/','post',$attachment);
// To user's wall
$result = $facebook->api('user-id/feed/','post',$attachment);
Ok maybe I missed something in the docs but I found the solution with is as follows:
Note this is for people who are trying to post from a cron job.
Grant the manage_pages, publish_stream and offline_access perms to
your app
Get the access token for your page from me/accounts in the graph api explorer
Add one simple line of code just after you initialize your fb object
$facebook->setAccessToken("XXXXX");
Note the access token needs to be the PAGE access token you got from step 2 and remember if you de-auth the app the access token will change.
Application will need to ask you for manage_pages & publish_stream permissions.
Obtain your pages page_access_token from the graph api /accounts call. Each page you own will have its own token listed. This token can be saved to database or accessed at the time of need. It is not recommended to expose or share this token.
Use "php-sdk" to make the post.
refer to: http://developers.facebook.com/docs/authentication/
refer to: http://developers.facebook.com/docs/reference/php/
NOTE: To impersonate the Page when posting to the wall (i.e. post as the Page, and not the current user), you must use a Page access_token with the manage_pages and publish_stream permissions, as described under Page Access Tokens above.
Example: Assumes user has installed and initialized php sdk for Facebook
<?php
if($user){
$vars = array(
'message' => "message goes here",
// you can uncomment below to enable an image with caption and link.
//'picture' => "image",
//'link' => "Link here",
//'name' => "Name here",
//'caption' => "Caption here",
'show_error' => true,
// comment out the access_token array below to post as a user instead of as page.
array('access_token' => YourPageAccessToken)
);
$testpost = $facebook->api('YourPageId/feed', 'post', $vars);
}
?>
If you find this answer helpful or is correct please remember to mark
it up or mark it as correct, so future users will have an easier time
finding answers.
Ok where I had thought we'd fixed it we haven't the post only works when i'm actually logged into the app itself.
I'm using Shawn's code with all the permissions mentioned with the access token from "me/accounts/" for the AmazingJobs Community page.
I've definitely granted manage_pages, publish stream and offline_acess to my own facebook account i then used the graph api explorer to find the access token within accounts and cut and pasted it into my code. Any ideas?
I use Facebook PHP API to publish to profile's news feed:
$this->facebook->api('/me/feed', 'POST', array(
'message' => $msg,
'link' => 'http://'.$_SERVER['SERVER_NAME'],
'privacy' => array('value' => 'EVERYONE')
));
but this message is visible only to friends. I want it to be publicly visible to everyone! Even non-friends. How to do this ?
You, for security reasons, cannot override a user's choice on how your app posts messages. The best you can do is to change the default visibility setting of your app (https://developers.facebook.com/apps/{APPID}/auth) to Everyone, and then let the user change it to something else when authorizing your app. The user also has a chance to change the setting in own settings at any time later.
I have a question, It might be found somewhere but I couldnt find a thread for it so if there is one, please post the link.
I admin a page that is a group of several other business areas. I want to post on one page with different icons and names, can that be done? Like different admins but administered by one person/account?
Possible?
What you are going to want to do is use a "Page access_token". To get this you will have to create an application and grant it the manage_pages permission.
You should see in the Authentication Documentation a section called "Page Login".
You can grant your application the manage_pages permission by going to this URL:
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=manage_pages&response_type=token
Don't forget to substitute YOUR_APP_ID and YOUR_URL with the correct values for you application and URL. (the URL can be any URL - it is where Facebook will send you after you close the Dialog). You will see a dialog that looks something like this :
Once you have the correct permission, you'll want to make a call to this URL :
https://graph.facebook.com/me/accounts?access_token=TOKEN_FROM_ABOVE
You will get a response similar to :
As you can see from the image, you will receive a list of all the pages that the user administers along with an access_token for each page.
You use this access_token to make posts on behalf of the page. Since you have not stated what programming language you are using I will give an example in php.
In php, posting to the page would look something like this :
$facebook->setAccessToken(ACCESS_TOKEN_YOU_RETRIEVED_EARLIER);
$attachment = array('message' => 'this is my message',
'name' => 'This is my demo Facebook application!',
'caption' => "Caption of the Post",
'link' => 'http://mylink.com',
'description' => 'this is a description',
'picture' => 'http://mysite.com/pic.gif',
'actions' => array(array('name' => 'Get Search',
'link' => 'http://www.google.com'))
);
$result = $facebook->api('/PAGE_ID/','post',$attachment);
Hope this helps!
Happy coding!
I'm using the simple code to post on user's wall. This:
$postwall = $facebook->api("/".$id."/feed", 'post', array(
'message' => "test",
'link' => 'http://www.Google.com',
'name' => 'test.',
'description'=> 'test.'
));
This code works but, it's posting with mine facebook name. I want to post with the application name. I searched for authenticating with application name, i tried everything but finally i didn't resolve my problem. Is there anyone who can help me with this please ?
I don't think this is possible. I guess this is the error you'll get:
(#200) Posts where the actor is a page
cannot also include a target_id
What I've done here is that getting the manage_pages permission and then get the application (profile page) access_token and tried to append it to the POST call.
I wanted to post a feed to a friends wall from my app and set it as private, which is viewable to the logged in user and the friend.
I want to do this using the new Graph api, I saw that if I set the "to" parameter in the feed post, it will be posted to the users friend wall.
I found a code here:
http://forum.developers.facebook.net/viewtopic.php?id=56458
(Posted by VovaOnline)
(link is dead, as facebook has taken down the forum)
$result = $facebook->api('/me/feed', 'POST', array(
'from' => array(
'name' => 'Vladimir Ageenko',
'id' => '100001308281502'
),
'name' => 'TEST NAME',
'caption' => 'Test Caption',
'description' => 'Test Description',
'message' => 'This is test.',
'privacy' => array(
'description' => 'Vladimir Sergeevich',
'value' => 'CUSTOM',
'friends' => 'SOME_FRIENDS',
'allow' => '100001338940933'
)
));
I am setting the post type as "link".
Can anyone tell me what is wrong in this code. One thing I know that "from" field has to be "to" and it has to be passed in a "data" variable. I am not sure how to do it.
Can any one help me?
You must encode privacy array, try this:
$privacy = array(
'description' => 'Vladimir Sergeevich',
'value' => 'CUSTOM',
'friends' => 'SOME_FRIENDS',
'allow' => '100001338940933'
);
$result = $facebook->api('/me/feed', 'POST', array(
'from' => array(
'name' => 'Vladimir Ageenko',
'id' => '100001308281502'
),
'name' => 'TEST NAME',
'caption' => 'Test Caption',
'description' => 'Test Description',
'message' => 'This is test.',
'privacy' => json_encode($privacy)
));
I don't think Facebook allows you to do this currently. Look at the graph API docs on Posting:
http://developers.facebook.com/docs/reference/api/post/
it says on privacy:
"Note: This privacy setting only applies to posts to the current or specified user's own Wall. Facebook ignores this setting for targeted Wall posts (when the user is writing on the Wall of a friend, Page, event, group connected to the user). Consistent with behavior on Facebook, all targeted posts are viewable by anyone who can see the target's Wall. "
I interpret this to mean that if you post on someone else's wall (feed), privacy is out of your control.
From now on it's not possible to post on user's friend wall due to February 6, 2013 breaking changes:
https://developers.facebook.com/roadmap/completed-changes/
Removing ability to post to friends walls via Graph API We will
remove the ability to post to a user's friends' walls via the Graph
API. Specifically, posts against [user_id]/feed where [user_id] is
different from the session user, or stream.publish calls where the
target_id user is different from the session user, will fail. If you
want to allow people to post to their friends' timelines, invoke the
feed dialog. Stories that include friends via user mentions tagging or
action tagging will show up on the friend’s timeline (assuming the
friend approves the tag). For more info, see this blog post.