From 48810c8efb02295bd6106b74bb2da3bc0e644ae1 Mon Sep 17 00:00:00 2001 From: Matthew Leon Grinshpun Date: Sat, 16 Jan 2010 05:12:58 +0800 Subject: [PATCH] uses strptime for date and time --- meetup_api_client.py | 53 +++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/meetup_api_client.py b/meetup_api_client.py index 91b9788..32e6797 100755 --- a/meetup_api_client.py +++ b/meetup_api_client.py @@ -1,11 +1,11 @@ #!/usr/bin/env python from __future__ import with_statement -import datetime import time import types from urllib import urlencode from urllib2 import HTTPError, HTTPErrorProcessor, urlopen, Request, build_opener +from datetime import datetime import oauth import MultipartPostHandler as mph @@ -231,21 +231,31 @@ def __init__(self, json, uritype): def __str__(self): return 'meta: ' + str(self.meta) + '\n' + str(self.results) +def converttime(str): + """Given a time string in Meetup's format, return a datetime.""" + MEETUP_DATE_FORMAT = '%a %b %d %H:%M:%S %Z %Y' + return datetime.strptime(str, MEETUP_DATE_FORMAT) + class API_Item(object): """Base class for an item in a result set returned by the API.""" datafields = [] #override + timefields = [] #override def __init__(self, properties): - """load properties that are relevant to all items (id, etc.)""" - for field in self.datafields: - self.__setattr__(field, properties[field]) - self.json = properties + """load properties that are relevant to all items (id, etc.)""" + for field in self.datafields: + self.__setattr__(field, properties[field]) + for field in self.timefields: + self.__setattr__(field, converttime(properties[field])) + self.json = properties def __repr__(self): return self.__str__(); class Member(API_Item): - datafields = ['bio', 'name', 'link','id','photo_url', 'zip','lat','lon','city','state','country','joined','visited'] + datafields = ['bio', 'name', 'link','id','photo_url', 'zip','lat','lon', + 'city','state','country'] + timefields = ['joined', 'visited'] def get_groups(self, apiclient, **extraparams): extraparams.update({'member_id':self.id}) @@ -255,14 +265,19 @@ def __str__(self): return "Member %s (url: %s)" % (self.name, self.link) class Photo(API_Item): - datafields = ['albumtitle', 'link', 'member_url', 'descr', 'created', 'photo_url', 'photo_urls', 'thumb_urls'] + datafields = ['albumtitle', 'link', 'member_url', 'descr', 'photo_url', + 'photo_urls', 'thumb_urls'] + timefields = ['created'] def __str__(self): return "Photo located at %s posted by member at %s: (%s)" % (self.link, self.member_url, self.descr) class Event(API_Item): - datafields = ['id', 'name', 'updated', 'time', 'photo_url', 'event_url', 'venue_lat', 'venue_lon', 'description', 'status', 'rsvpcount', 'no_rsvpcount', 'maybe_rsvpcount'] + datafields = ['id', 'name', 'photo_url', 'event_url', 'venue_lat', + 'venue_lon', 'description', 'status', 'rsvpcount', + 'no_rsvpcount', 'maybe_rsvpcount'] + timefields = ['time', 'updated'] def __str__(self): return 'Event %s named %s at %s (url: %s)' % (self.id, self.name, self.time, self.event_url) @@ -272,17 +287,18 @@ def get_rsvps(self, apiclient, **extraparams): return apiclient.get_rsvps(**extraparams) class Rsvp(API_Item): - datafields = ['name', 'link', 'comment','zip','coord','lon','city','state','country','response','guests','answers','updated','created'] + datafields = ['name', 'link', 'comment','zip','coord','lon','city','state', + 'country','response','guests','answers'] + timefields = ['updated', 'created'] def __str__(self): return 'Rsvp by %s (%s) with comment: %s' % (self.name, self.link, self.comment) class Group(API_Item): - datafields = [ 'id','name','group_urlname','link','updated',\ - 'members','created','photo_url',\ - 'description','zip','lat','lon',\ - 'city','state','country','organizerProfileURL', \ - 'topics'] + datafields = [ 'id','name','group_urlname','link', 'members','photo_url', + 'description','zip','lat','lon', 'city','state','country', + 'organizerProfileURL', 'topics'] + timefields = ['created', 'updated'] def __str__(self): return "%s (%s)" % (self.name, self.link) @@ -316,8 +332,8 @@ def get_events(self,apiclient, **extraparams): return apiclient.get_events(**extraparams) class Topic(API_Item): - datafields = ['id','name','description','link','updated',\ - 'members','urlkey'] + datafields = ['id','name','description','link', 'members','urlkey'] + timefields = ['updated'] def __str__(self): return "%s with %s members (%s)" % (self.name, self.members, @@ -332,8 +348,9 @@ def get_photos(self, apiclient, **extraparams): return apiclient.get_photos(**extraparams) class Comment(API_Item): - datafields = ['name','link','comment','rating','photo_url',\ - 'created','lat','lon','country','city','state'] + datafields = ['name','link','comment','rating','photo_url', + 'lat','lon','country','city','state'] + timefields = ['created'] def __str__(self): return "Comment from %s (%s)" % (self.name, self.link)