Ejemplo n.º 1
0
def callback(request):
    """This is where Twitter will redirect the user after this app has been authorized."""
    try:
        unauthed_token = request.session.get('TWITTER_UNAUTH_TOKEN', None)
        oauth_verifier = request.GET.get('oauth_verifier', None)
        try:
            if unauthed_token:
                del request.session['TWITTER_UNAUTH_TOKEN']
        except KeyError:
            pass
        if not unauthed_token:
            _log.debug("Unauthenticated token not found in session")
            return _denied_response(request)
        token = oauth.OAuthToken.from_string(unauthed_token)
        oauth_token = request.GET.get('oauth_token', None)
        if token.key != oauth_token:
            _log.debug("Tokens did not match %s - %s", token.key, oauth_token)
            return _denied_response(request)
        tw = TwitterAPI()
        try:
            access_token = tw.exchange_request_token_for_access_token(token, oauth_verifier)
        except KeyError:
            tw.close()
            return _denied_response(request)
        twitter_profile = tw.get_profile(access_token)
        tw.close()
        if twitter_profile:
            _log.debug("Twitter profile downloaded:\n%s", twitter_profile)
            try:
                p = simplejson.loads(twitter_profile)
            except Exception, e:
                # try one more time
                try:
                    tw = TwitterAPI()
                    twitter_profile = tw.get_profile(access_token)
                    tw.close()
                    _log.debug("Twitter profile downloaded on retry:\n%s", twitter_profile)
                    if not twitter_profile:
                        raise Exception("OAuth error: retry failed on get_profile")
                    p = simplejson.loads(twitter_profile)
                except Exception, e:
                    _log.warn("Twitter profile could not be JSON decoded.\n%s", twitter_profile)
                    _log.exception(e)
                    add_message(request, u"We are unable to connect to Twitter at the moment. Please try again in a few minutes.")
                    return _denied_response(request)
            _log.debug(p)
            screen_name = p.get('screen_name')
            full_name = p.get('name', p['screen_name'])
            # Split full_name into first name and last name
            x = full_name.split(' ', 1)
            first_name, last_name = u'', u''
            if len(x) > 1:
                first_name, last_name = x[0], x[1]
            elif len(x) == 1:
                first_name, last_name = u'', x[0]
            profile_image = p.get('profile_image_url', '')
            if '/images/default_profile' in profile_image:
                profile_image = ''
            profile = dict(
                profile_type=u'twitter',
                screen_name=screen_name,
                first_name=first_name,
                last_name=last_name,
                appuser_id=p['id'],
                profile_image_url=profile_image,
                access_token=access_token.to_string()
            )
            if request.user.is_authenticated():
                user = request.user
                p = save_open_profile(user, profile)
                add_message(request, u"You've connected your Twitter account successfully.")
                # user.message_set.create(message=_(u"Thank you for authorizing us to update your Twitter status!"))
            else:
                request.session['OPEN_PROFILE'] = profile
Ejemplo n.º 2
0
        """
        response = urlfetch.fetch(url,
                                  payload=payload,
                                  method=method,
                                  headers=headers,
                                  follow_redirects=follow_redirects,
                                  validate_certificate=validate_certificate)

        return TwitterAPI.Response(data=response.content,
                                   status_code=response.status_code,
                                   headers=response.headers)


twitter_api = TwitterAPI(options={
    'consumer_key': twitter_credentials.API_KEY,
    'consumer_secret': twitter_credentials.API_SECRET
},
                         requestor=URLFetchRequestor())


def load_locations():
    allQuery = Location.query()
    locations = []

    for location in allQuery.iter():
        locations.append(location.to_dict())

    return locations


def update_locations():
Ejemplo n.º 3
0
    # Twitter instance
    @property
    def twitter_instance(self) -> TwitterAPI:
        return self._twitter_instance

    @twitter_instance.setter
    def twitter_instance(self, value: TwitterAPI):
        self._twitter_instance = value

    # Discord instance
    @property
    def discord_instance(self) -> DiscordBot:
        return self._discord_instance

    @discord_instance.setter
    def discord_instance(self, value: DiscordBot):
        self._discord_instance = value


if __name__ == "__main__":
    controller = ParentController()

    discord_bot = DiscordBot(controller)
    controller.discord_instance = discord_bot

    twitter_api = TwitterAPI(controller)
    controller.twitter_instance = twitter_api

    # Run the bot last
    discord_bot.run_bot()