Archive for Tag "facebook"

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})