예제 #1
0
파일: views.py 프로젝트: rickeyski/causal
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))
예제 #2
0
파일: service.py 프로젝트: rickeyski/causal
 def _get_feed(self):
     feed = get_data(
         self.service,
         'https://github.com/%s.json' % (self.service.auth.username,),
         disable_oauth=True
     )
     return feed
예제 #3
0
파일: views.py 프로젝트: 1stvamp/causal
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))
예제 #4
0
파일: service.py 프로젝트: 1stvamp/causal
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)
예제 #5
0
파일: service.py 프로젝트: 1stvamp/causal
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
예제 #6
0
파일: service.py 프로젝트: 1stvamp/causal
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
            )
예제 #7
0
파일: service.py 프로젝트: 1stvamp/causal
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
예제 #8
0
파일: service.py 프로젝트: 1stvamp/causal
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
예제 #9
0
파일: service.py 프로젝트: 1stvamp/causal
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)
예제 #10
0
파일: service.py 프로젝트: rickeyski/causal
    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)
예제 #11
0
파일: service.py 프로젝트: 1stvamp/causal
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)
예제 #12
0
파일: service.py 프로젝트: rickeyski/causal
    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)
예제 #13
0
파일: service.py 프로젝트: 1stvamp/causal
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)
예제 #14
0
파일: views.py 프로젝트: rickeyski/causal
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))
예제 #15
0
파일: service.py 프로젝트: rickeyski/causal
    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)
예제 #16
0
파일: service.py 프로젝트: rickeyski/causal
    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
예제 #17
0
파일: views.py 프로젝트: rickeyski/causal
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))
예제 #18
0
파일: service.py 프로젝트: 1stvamp/causal
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)
예제 #19
0
파일: service.py 프로젝트: 1stvamp/causal
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
예제 #20
0
파일: views.py 프로젝트: 1stvamp/causal
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))
예제 #21
0
파일: views.py 프로젝트: 1stvamp/causal
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))
예제 #22
0
파일: service.py 프로젝트: rickeyski/causal
    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