def get_token(): print "get_token\n" # print "Args:" , request.args if 'RUN_LOCALLY_OUTSIDE_HEROKU' in os.environ: return fbapi_auth("1234")[0] if request.args.get('code', None): return fbapi_auth(facebook_request.args.get('code'))[0] cookie_key = 'fbsr_{0}'.format(FB_APP_ID) if cookie_key in request.cookies: c = request.cookies.get(cookie_key) encoded_data = c.split('.', 2) sig = encoded_data[0] data = json.loads(urlsafe_b64decode(str(encoded_data[1]) + (64-len(encoded_data[1])%64)*"=")) if not data['algorithm'].upper() == 'HMAC-SHA256': raise ValueError('unknown algorithm {0}'.format(data['algorithm'])) h = hmac.new(FB_APP_SECRET, digestmod=hashlib.sha256) h.update(encoded_data[1]) expected_sig = urlsafe_b64encode(h.digest()).replace('=', '') if sig != expected_sig: raise ValueError('bad signature') code = data['code'] params = { 'client_id': FB_APP_ID, 'client_secret': FB_APP_SECRET, 'redirect_uri': '', 'code': data['code'] } from urlparse import parse_qs r = facebook_request.get( graph_server + '/oauth/access_token', params=params) token = parse_qs(r.content).get('access_token') return token
def fb_call(call, args=None): print "fb_call: %s\n" % call url = graph_server + "/{0}".format(call) r = facebook_request.get(url, params=args) content = r.content # print "got content :" + content return json.loads(content)
def fql(fql, token, args=None): print "fql: %s\n" % fql if not args: args = {} args["query"], args["format"], args["access_token"] = fql, "json", token url = api_facebook_server + "/method/fql.query" r = facebook_request.get(url, params=args) return json.loads(r.content)
def fbapi_get_string(path, params=None, access_token=None, encode_func=urllib.urlencode): print "fbapi_get_string: %s\n" % path """Make an API call""" if not params: params = {} params[u'method'] = u'GET' if access_token: params[u'access_token'] = access_token for k, v in params.iteritems(): if hasattr(v, 'encode'): params[k] = v.encode('utf-8') url = facebook_server + path params_encoded = encode_func(params) url = url + params_encoded result = facebook_request.get(url).content return result
def get_location_latlon(id): url = "%s/%d" % (graph_server,id) content=facebook_request.get(url ).content print content location = json.loads(content) return location
import os.path import urllib import hmac import json import hashlib import urlparse from base64 import urlsafe_b64decode, urlsafe_b64encode on_heroku = True #if you want to run locally export RUN_LOCALLY_OUTSIDE_HEROKU=1 if 'RUN_LOCALLY_OUTSIDE_HEROKU' in os.environ: import MyRequests as facebook_request graph_server= facebook_request.graph_server() facebook_server= facebook_request.facebook_server() api_facebook_server = facebook_request.facebook_api_server() else: print "running on facebook" import requests import requests as facebook_request graph_server= "https://graph.facebook.com" facebook_server= "https://www.facebook.com" api_facebook_server = "https://api.facebook.com" on_heroku = False from flask import Flask, request, redirect, render_template, url_for