def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_data( service, 'http://feeds.delicious.com/v2/json/%s' % (username,), disable_oauth=True ) # check the username is valid if user_feed[0]['d'] == '404 Not Found': messages.error(request, 'Unable to find username "%s", please try again' % (username,)) else: if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Delicious username') return redirect(settings_redirect(request))
def _get_feed(self): feed = get_data( self.service, 'https://github.com/%s.json' % (self.service.auth.username,), disable_oauth=True ) return feed
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, created=datetime.now(), api_token=service.app.oauth.consumer_key ) user_feed = get_data( None, 'http://feeds.delicious.com/v2/json/%s' % (username), disable_oauth=True) # check the username is valid if user_feed[0]['d'] == '404 Not Found': messages.error(request, 'Unable to find your username, please try again') else: service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Delicious username') return redirect(settings_redirect(request))
def get_items(user, since, model_instance=None): """Fetch the history of checkins for the current user.""" serv = model_instance or get_model_instance(user, __name__) try: checkins = get_data(serv, 'http://api.foursquare.com/v1/history.json') except Exception, e: raise LoggedServiceError(original_exception=e)
def _get_feed(user, serv): """Fetch the raw feed from github.""" user_feed = get_data( serv, 'http://github.com/%s.json' % (user), disable_oauth=True) return user_feed
def _fetch_albums_json(serv, oauth_token): """Use graph api to fetch photo information.""" return get_data( serv, 'https://graph.facebook.com/me/albums?access_token=%s' \ % (oauth_token), disable_oauth=True )
def _fetch_photos_from_album_json(album_id, serv, oauth_token): """Use graph api to fetch photo information.""" photo_feed_json = get_data( serv, 'https://graph.facebook.com/%s/photos?access_token=%s' \ % (album_id, oauth_token), disable_oauth=True ) return photo_feed_json
def _fetch_checkins_json(serv, oauth_token): """Use graph api to fetch photo information.""" checkins_feed_json = get_data( serv, 'https://graph.facebook.com/me/checkins?access_token=%s' \ % (oauth_token), disable_oauth=True ) return checkins_feed_json
def get_stats_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) items = [] at = AccessToken.objects.get(service=serv) user_feed = get_data( serv, 'http://github.com/%s.json' % (at.username), disable_oauth=True) return _convert_stats_feed(at.username, serv, user_feed, since)
def get_items(self, since): url = 'http://feeds.delicious.com/v2/json/%s?count=100' % ( self.service.auth.username, ) user_feed = get_data( self.service, url, disable_oauth=True ) return self._convert_feed(user_feed, since)
def get_items(user, since, model_instance=None): serv = model_instance or get_model_instance(user, __name__) at = AccessToken.objects.get(service=serv) url = 'http://feeds.delicious.com/v2/json/%s?count=100' % (at.username,) user_feed = get_data( serv, url, disable_oauth=True ) return _convert_feed(serv, user, user_feed, since)
def get_artists(self, since): """Get a users top artists. """ fav_artists = get_data( self.service, 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=%s&api_key=%s&period=7day&format=json' % ( self.service.auth.username, self.service.app.auth_settings['api_key'] ), disable_oauth=True ) return self._convert_top_artists_json(fav_artists)
def get_artists(user, since, model_instance=None): """Get a users top artists.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) fav_artists = None if access_token: fav_artists = get_data( serv, 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=%s&api_key=%s&period=7day&format=json' \ % (access_token.username, access_token.api_token,), disable_oauth=True ) return _convert_top_artists_json(user, serv, fav_artists)
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_data( service, 'http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=%s&api_key=%s&format=json' % ( username, service.app.auth_settings['api_key'] ), disable_oauth=True ) # check we have a valid username if user_feed.has_key('error'): messages.error( request, 'Unable to validate your username "%s" with Last.fm, please check your username and retry.' % ( username, ) ) return redirect(settings_redirect(request)) if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a Last.fm username') return redirect(settings_redirect(request))
def get_items(self, since): """Fetch and filter the updates from Last.fm. """ tracks_listing = None try: t = datetime.now() url = 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json&from=%s&to=%s&limit=%s' % ( self.service.auth.username, self.service.app.auth_settings['api_key'], str(int(mktime(since.timetuple()))), str(int(mktime(t.timetuple()))), MAX_RESULTS) tracks_listing = get_data( self.service, url, disable_oauth=True ) except Exception, exception: raise LoggedServiceError(original_exception = exception)
def get_upcoming_gigs(self, since, artist=None): """Return a list of up coming gigs for the user. """ items = [] gigs = get_data( self.service, 'http://ws.audioscrobbler.com/2.0/?method=artist.getevents&artist=%s&api_key=%s&format=json' % ( artist.replace(' ', '+'), self.service.app.auth_settings['api_key'] ), disable_oauth=True ) items = [] if gigs and gigs.has_key('events') and gigs['events'].has_key('event') : for gig in gigs['events']['event']: item = ServiceItem() item.location = {} try: if gig.has_key('venue') and \ gig['venue'].has_key('name') and \ gig.has_key('startDate'): item.venue_name = gig['venue']['name'] item.event_url = gig['url'] item.date = datetime.strptime(gig['startDate'], '%a, %d %b %Y %H:%M:%S') if gig['venue'].has_key('location') and \ gig['venue']['location'].has_key('geo:point'): item.location['long'] = \ gig['venue']['location']['geo:point']['geo:long'] item.location['lat'] = \ gig['venue']['location']['geo:point']['geo:lat'] items.append(item) except: pass return items
def auth(request): """We dont need a full oauth setup just a username. """ service = get_model_instance(request.user, PACKAGE) if service and request.method == 'POST': username = request.POST['username'] if username: user_feed = get_data( service, 'https://api.github.com/users/%s' % (username), disable_oauth=True ) if user_feed.has_key('message') and user_feed['message'] == "Not Found": messages.error(request, 'Unable to validate your username with github, please check your username and retry.') return redirect(settings_redirect(request)) if not service.auth: auth_handler = Auth() else: auth_handler = service.auth auth_handler.username = username auth_handler.save() if not service.auth: service.auth = auth_handler service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a github username') return redirect(settings_redirect(request))
def get_items(user, since, model_instance=None): """Fetch and filter the updates from Last.fm.""" serv = model_instance or get_model_instance(user, __name__) access_token = AccessToken.objects.get(service=serv) tracks_listing = None if access_token: try: t = datetime.now() tracks_listing = get_data( serv, 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json&from=%s&to=%s&limit=%s' \ % (access_token.username, access_token.api_token, str(int(mktime(since.timetuple()))), str(int(mktime(t.timetuple()))), MAX_RESULTS), disable_oauth=True ) except Exception, exception: raise LoggedServiceError(original_exception = exception)
def get_upcoming_gigs(user, since, model_instance=None, artist=None): """Return a list of up coming gigs for the user.""" serv = model_instance or get_model_instance(user, __name__) items = [] access_token = AccessToken.objects.get(service=serv) gigs = get_data( serv, 'http://ws.audioscrobbler.com/2.0/?method=artist.getevents&artist=%s&api_key=%s&format=json' % (artist.replace(' ', '+'), access_token.api_token,), disable_oauth=True ) items = [] if gigs and gigs.has_key('events') and gigs['events'].has_key('event') : for gig in gigs['events']['event']: item = ServiceItem() item.location = {} try: if gig.has_key('venue') and \ gig['venue'].has_key('name') and \ gig.has_key('startDate'): item.venue_name = gig['venue']['name'] item.event_url = gig['url'] item.date = gig['startDate'] if gig['venue'].has_key('location') and \ gig['venue']['location'].has_key('geo:point'): item.location['long'] = \ gig['venue']['location']['geo:point']['geo:long'] item.location['lat'] = \ gig['venue']['location']['geo:point']['geo:lat'] items.append(item) except: pass return items
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # Delete existing token AccessToken.objects.filter(service=service).delete() user_feed = get_data( None, 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=%s&api_key=%s&format=json' % (username, service.app.oauth.consumer_key), disable_oauth=True) # check we have a valid username if not user_feed.has_key('error') and user_feed['error'] != 6: # Before creating a new one AccessToken.objects.create( service=service, username=username, created=datetime.now(), api_token=service.app.oauth.consumer_key ) service.setup = True service.public = True service.save() else: messages.error(request, 'Unable to validate your username with Last.fm, please check your username and retry.') else: messages.error(request, 'Please enter a Last.fm username') return redirect(settings_redirect(request))
def auth(request): """We dont need a full oauth setup just a username.""" service = get_model_instance(request.user, MODULE_NAME) if service and request.method == 'POST': username = request.POST['username'] if username: # Delete existing token AccessToken.objects.filter(service=service).delete() # Before creating a new one AccessToken.objects.create( service=service, username=username, created=datetime.now(), api_token=service.app.oauth.consumer_key ) user_feed = get_data( None, 'http://github.com/%s.json' % (username), disable_oauth=True) # check the username is valid if user_feed.has_key('error'): messages.error(request, 'Unable to validate your username with Git Hub, please check your username and retry.') else: service.setup = True service.public = True service.save() else: messages.error(request, 'Please enter a GitHub username') return redirect(settings_redirect(request))
def _convert_stats_feed(self, feed, since): """Take the user's atom feed. """ items = [] avatar = "" if feed and feed[0]['actor_attributes'].has_key('gravatar_id'): avatar = 'http://www.gravatar.com/avatar/%s' % (feed[0]['actor_attributes']['gravatar_id'],) commit_times = {} days_committed = generate_days_dict() for entry in feed: if entry['public']: dated, time, offset = entry['created_at'].rsplit(' ') created = self._convert_date(entry) if created.date() >= since: # extract commits from push event if entry['type'] == 'PushEvent': # fetch and get the stats on commits for commit in entry['payload']['shas']: url = "https://api.github.com/repos/%s/%s/git/commits/%s" % (self.service.auth.username, entry['repository']['name'], commit[0]) commit_detail = get_data(self.service, url, disable_oauth=True) item = ServiceItem() item.title = "Commit for %s" % (entry['repository']['name']) item.body = '"%s"' % (commit_detail['message']) item.created = self._convert_commit_date(commit_detail) if commit_detail.has_key('url'): item.link_back = commit_detail['url'] item.service = self.service items.append(item) if days_committed.has_key(item.created.date()): days_committed[item.created.date()] = days_committed[item.created.date()] + 1 hour = created.strftime('%H') if commit_times.has_key(hour): commit_times[hour] += + 1 else: commit_times[hour] = 1 else: item = ServiceItem() self._set_title_body(entry, item) item.created = created if entry.has_key('url'): item.link_back = entry['url'] item.service = self.service items.append(item) commit_times = SortedDict(sorted( commit_times.items(), reverse=True, key=lambda x: x[1] )) days_committed = SortedDict(sorted(days_committed.items(), reverse=False, key=lambda x: x[0])) max_commits_on_a_day = SortedDict(sorted(days_committed.items(), reverse=True, key=lambda x: x[1])) max_commits_on_a_day = max_commits_on_a_day[max_commits_on_a_day.keyOrder[0]] + 1 return items, avatar, commit_times, self._most_common_commit_time(commit_times), days_committed, max_commits_on_a_day