Exemple #1
0
    def rate_limited_search(self, tw_search_order, task):
        """ Search Twitter, sleeping when rate limitations are reached.

        Args:
            tw_search_order (TwitterSearchOrder): Search parameters for Twitter.
            task (object): Celery task running this plugin.

        Returns:
            Iterable: Tweets matching search parameters.
        """
        try:
            return self.client.search_tweets_iterable(tw_search_order)

        except TwitterSearchException as e:
            if e.code != 429:
                raise e

            reset_value = int(self.client.get_metadata()['x-rate-limit-reset'])
            reset_datetime = datetime.fromtimestamp(reset_value)

            delta = reset_datetime - datetime.now()
            timeout = delta.seconds + 1

            logger.info(f'Twitter rate limit reached. Setting Twitter-Lock: '
                        f'{timeout} seconds.')
            redis_store.set('Twitter-Lock', reset_value, timeout)

            exception = CeleryRetry(e, 'Twitter rate limit reached')
            raise task.retry(exc=exception, countdown=timeout)
Exemple #2
0
def authorized():
    print request.args
    if request.args.get('code'):
        response = requests.post('https://dashboard.justyo.co/token/', data={
            'code': request.args.get('code'),
            'client_id': os.environ.get('YO_CLIENT_ID'),
            'client_secret': os.environ.get('YO_CLIENT_SECRET'),
            'redirect_uri': os.environ.get('YO_REDIRECT_URI'),
            'grant_type': 'authorization_code'
        })
        json_response = response.json()
        if json_response.get('access_token'):
            yo_token = json_response.get('access_token')
            response = requests.get('https://api.justyo.co/me/?access_token=' + yo_token)
            json_response = response.json()
            username = json_response.get('username')
            if username:

                session['access_token'] = yo_token
                session['username'] = username
                session['display_name'] = json_response.get('display_name')

                slack_user_id = session.get('slack_user_id')
                if slack_user_id:
                    redis_store.set(slack_user_id, yo_token)
                    del session['slack_user_id']
                    return render_template('slack.html', done=True)

    return redirect('/?add=1')
Exemple #3
0
def authorized_yo():
    print request.args
    if request.args.get('code') and request.args.get('state'):
        response = requests.post('https://dashboard.justyo.co/token/', data={
            'code': request.args.get('code'),
            'client_id': YO_STATUS_TWITTER_CLIENT_ID,
            'client_secret': YO_STATUS_TWITTER_CLIENT_SECRET,
            'redirect_uri': YO_STATUS_TWITTER_REDIRECT_URI,
            'grant_type': 'authorization_code'
        })
        json_response = response.json()
        if json_response.get('access_token'):
            yo_token = json_response.get('access_token')
            response = requests.get('https://api.justyo.co/me/?access_token=' + yo_token)
            json_response = response.json()
            username = json_response.get('username')
            if username:
                session['yo_username'] = username
                redis_store.set('yo.token.for.twitter.user.id:' + session['twitter_user_id'], yo_token)
                status_url = 'https://yostat.us/' + session['yo_username']
                return render_template('twitter.html', status_url=status_url, done=True)

    return render_template('twitter.html')