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
""" 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():
# 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()