Using Facebook's API to post to my organization's FB page from my organization's website
Implementing this use case with the Facebook API seemed oddly difficult/complicated to me, so I figured I'd document it.
I have a small website for an organization. It's a sort of blog-like CMS site, built with Rails. When content gets published on the site, I wanted to post a status message about the new content on the organization's Facebook page.
Here are the steps I went through to get a non-expiring page access token that can be used to post to a Facebook page:
Step 1: Create Facebook App
- navigate to: https://developers.facebook.com/
- click Apps > Add New App
- select the "www" option
- enter some info about your app, then skip the quick start (it seems unnecessary)
- obtain App ID and App Secret for the app
Step 2: Get Short-lived User Token Associated With App
- on developers.facebook.com, click Tools > Graph API Explorer
- select your new Facebook app's name from the application select box
- click the Get Access Token button
- select 'extended permissions' link, check 'managepages' and 'publishactions', and submit
- retrieve the User Access Token that has been added to the access token field
Step 3: Get Longer Lived User Token
The previous token will expire in a couple of hours. Facebook will let you get a token that will last for 60 days.
You can use the Facebook Graph API Explorer for this, but I chose to use curl on the command line:
curl -X GET "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=[your facebook app id]&client_secret=[your facebook app secret]&fb_exchange_token=[short lived user access token from previous step]"
the output will look something like, containing the Extended Life User Token:
access_token=[the new longer life user token]&expires=5184000
Step 4: Get Page Access Token
In order to post to the status timeline for the page, I need to post as the page. To do this, I need to use my new longer life user token to get the page token.
Using curl again:
curl -X GET "https://graph.facebook.com/v2.2/me/accounts?access_token=[the new longer life user token]"
This will result in something like, the following, which contains the Page Access Token:
{
"data": [
{
"access_token": "[new page access token]",
"category": "Non-profit organization",
"id": "mypageid",
"name": "Mypagename",
"perms": [
"ADMINISTER",
"EDIT_PROFILE",
"CREATE_CONTENT",
"MODERATE_CONTENT",
"CREATE_ADS",
"BASIC_ADMIN"
]
}
],
When I debug the page access token at https://developers.facebook.com/tools/debug/, it tells me that the token never expires.
Step 5: Post Status Message to Page
Again with curl:
curl -X POST https://graph.facebook.com/v2.2/mypageid/feed -F 'access_token=[page access token]' -F 'message=posting with page token'