views:

1009

answers:

2

I'm trying to write a simple app that lets a user grant my code permission to write to her page's Facebook stream. As I understand it, it should be as easy as:

  1. Have the user click on a button that launches a popup containing the a page in my Facebook app.
  2. In that page, they click on something that grants stream_publish to my app and assigns that permission to their page.
  3. Window closes, I now have all the info I need to run a script in cron to push stuff to that page's stream.

I've been reading the wiki for days. Notes on pyfacebook are at least a year out of date, and people have pointed me to the socialauth app for Django which appears to be equally out of date and focused on targeting users as opposed to their pages. I can't even do #1 up there, let along #2 and 3.

If someone could show me how to use Django/Python to request/receive permission to write to a Facebook stream, that would be a great start.

Any help would be greatly appreciated.

+2  A: 

Have you looked at minifb? Their examples page shows basically everything you need to know to request authorization and receive a session key. (Also, the github page for pyfacebook shows that the library is still alive)

So, for your scenario you'd need:

  1. Request the "stream_publish" permission. There are some ways to do it, but I'd actually go for the easiest: submitting a form (note I've never done an app for facebook, I'm probably wrong assuming this approach is the easiest :-)
  2. Use your application normally: call the API methods using the user_id of the user that authorized your application (you'll have to store it) and, since you were authorized, it shouldn't fail.

For this, basically, add this form on your template:

<form promptpermission="publish_stream">
<input type="submit" value="Allow Publish Stream">
</form>

Kudos to the Facebook developers, by the way. Very nice official documentation.

EDIT: I'm not allowed to comment yet so: Should you face problems getting the uid, check this question and the references.

Caio Romão
You make it sound so easy -- I'll have to try this out in the morning and get back to you :-)
Daniel Quinn
A: 

After a lot of tinkering, I appear to have solved all of my problems in Facebookland:

  1. Turns out that having a user click on a button to grant permissions is as easy as Caio Romão said it was. For my part though, I found that directing them to the Facebook Desktop App link was way easier and more dependable.
  2. Using this link method, Facebook allows you to specify enable_profile_selector=1 which will make sure that a list of pages is generated from which the user can select which pages (if any) will grant these permissions.
  3. For this one though, Facebook is totally broken. While in #2 they allow the user to select a page to grant permissions, they don't pass this information onto the application either by way of a POST or in the headers. It's just not there. Instead, you have to do an ugly trick with FQL and some additional questions to the user to make it work.

Anyway, I detailed it all on my blog if anyone is interested. Thanks for your help!

Daniel Quinn