Offline Access Facebook Apps (infinite session) in Appengine Webapp

// demonstrate how to get infinite session from facebook apps

from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import urllib
import facebook

FACEBOOK_API_KEY='..'
FACEBOOK_SECRET_KEY='..'

class FacebookPage(webapp.RequestHandler):
  def get(self):
    fb = Facebook(FACEBOOK_API_KEY, FACEBOOK_SECRET_KEY, 
      callback_path=self.request.path)
    auth_token = self.request.get('auth_token')
    #got auth_token, get temporary session
    if auth_token:
      try:
        fb.auth_token = auth_token
        fb.auth.getSession()
      except:
        self.redirect(fb.get_login_url(next=self.request.url, canvas=False))
    else:
      #not authenticated yet, redirect to facebook login URL
      return self.redirect(fb.get_login_url(next=self.request.url, canvas=False))
    
    #now we have a live session
    #we can get her basic info
    user_info = self.facebook.users.getInfo([self.facebook.uid], ['name', 'pic_square'])[0]

    #check for offline access permission
    permission_link = None
    if not self.facebook.users.hasAppPermission('offline_access'):
      params = {
        'api_key':FACEBOOK_API_KEY,
        'ext_perm':'offline_access,status_update,read_stream',
        'next':self.request.url,
        'cancel':self.request.url,
      }
      permission_link = "http://www.facebook.com/connect/prompt_permissions.php?%s" % urllib.urlencode(params)
    else:
      #got permission, save her session for future use
      if fb.session_key_expires == 0:
        user = User(uid=fb.uid, session_key=fb.session_key)
        user.put()
    
    self.response.out.write(template.render(
      'facebook_page.html', {
        'permission_link':permission_link, 
        'user_info':user_info})

1 Comment

  1. gravatar
    rabi said:

    Thanks for the post!!

    I could not able to use the offline_access even after reading. I would be glad if you could clarify

    1) fb = Facebook(FACEBOOK_API_KEY, FACEBOOK_SECRET_KEY,
    callback_path=self.request.path)

    are your using standard facebook sdk? where is Facebook class

    could you please provide me running code for this. looking for your help.

    Anyways your blog seems really interesting!! at lest for the python lover and beginner like me!!!

    2010-10-25 17:29

Post A Comment