Skip to content

Instantly share code, notes, and snippets.

@joshourisman
Created August 12, 2011 20:39
Show Gist options
  • Save joshourisman/1142943 to your computer and use it in GitHub Desktop.
Save joshourisman/1142943 to your computer and use it in GitHub Desktop.
class FBObjectView(JSONResponseMixin, View):
BASE_URL = 'https://graph.facebook.com'
def dispatch(self, *args, **kwargs):
request = args[0]
self.profile = request.user.get_profile()
return super(FBObjectView, self).dispatch(*args, **kwargs)
def get(self, *args, **kwargs):
self.object = kwargs['id']
return self.get_object()
def get_object(self):
url = self.get_endpoint_url()
params = {'access_token': self.profile.access_token}
response = requests.get(url, params=params)
self.raw = json.loads(response.content)
return self.process_data()
def get_endpoint_url(self):
return '%s/%s' % (self.BASE_URL, self.object)
def process_data(self):
return self.render_to_response(self.raw)
class GetAlbumListView(FBObjectView):
def get(self, request, *args, **kwargs):
self.until = request.GET.get('until', None)
return self.get_object()
def process_data(self):
print self.raw
albums = self.raw['data']
response = {'current': albums}
if len(albums) == 5:
next = self.raw['paging']['next']
response['until'] = parse_qs(urlparse(next).query)['until'][0]
response['next'] = self.get_next(next)
else:
response['next'] = None
return self.render_to_response(response)
def get_next(self, next):
raw = json.loads(requests.get(next).content)
albums = raw['data']
return albums
def get_endpoint_url(self):
return '%s/me/albums/' % self.BASE_URL
class GetFriendListView(FBObjectView):
def get(self, *args, **kwargs):
return self.get_object()
def get_endpoint_url(self):
return '%s/me/friends/' % self.BASE_URL
class GetAlbumView(FBObjectView):
def get_endpoint_url(self):
return '%s/%s/photos/' % (self.BASE_URL, self.object)
class GetPhotoView(FBObjectView):
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment