def get(self): user = users.get_current_user() if user: # get token and secret from db p_users = db.GqlQuery("SELECT * FROM USER WHERE google_username = :gu LIMIT 1", gu = user.nickname()) if p_users.count() >= 1: for p_user in p_users: if p_user: self.response.out.write(p_user.google_username) auth = tweepy.OAuthHandler(config.twitter_consumer_token(), config.twitter_consumer_secret()) #auth.set_request_token(dbauth.token_key, dbauth.token_secret) auth.set_access_token(p_user.twitter_oauth_key, p_user.twitter_oauth_secret) auth_api = tweepy.API(auth) auth_api.update_status("Hello World from the GTUG Zurich Hackathon.") self.response.out.write('tweet send successfully') else: self.response.out.write("user empty") else: self.response.out.write("no users found") else: self.response.out.write("Error while sending tweet")
def get(self): user = users.get_current_user() if user: # check if there are already twitter credentials in the db. -> if yes suggest to delete them. consumer_token = config.twitter_consumer_token() consumer_secret = config.twitter_consumer_secret() callback_url = helper.get_application_base_url(self.request.uri) + '/twitter/callback' auth = tweepy.OAuthHandler(consumer_token, consumer_secret, str(callback_url)) try: redirect_url = auth.get_authorization_url() # REMOVE COOKIES FOR TWITTER expires = datetime.now() + timedelta(weeks=2) expires_rfc822 = expires.strftime('%a, %d %b %Y %H:%M:%S GMT') cookie = "socialtank_twitter_token_key=" + str(auth.request_token.key.encode()) + ";expires=" + str(expires_rfc822) + ";path=/" self.response.headers.add_header('Set-Cookie',cookie) expires = datetime.now() + timedelta(weeks=2) expires_rfc822 = expires.strftime('%a, %d %b %Y %H:%M:%S GMT') cookie = 'socialtank_twitter_token_secret='+str(auth.request_token.secret.encode())+';expires=' + str(expires_rfc822) + ';path=/' self.response.headers.add_header('Set-Cookie',cookie) self.redirect(redirect_url) except tweepy.TweepError, e: self.response.out.write('Error! Failed to get request token.') self.response.out.write(e)
def get(self): consumer_token = config.twitter_consumer_token() consumer_secret = config.twitter_consumer_secret() verifier = self.request.GET.get('oauth_verifier') auth = tweepy.OAuthHandler(consumer_token, consumer_secret) token = (self.request.cookies.get('socialtank_twitter_token_key'), self.request.cookies.get('socialtank_twitter_token_secret')) auth.set_request_token(token[0], token[1]) try: auth.get_access_token(verifier) auth.set_access_token(auth.access_token.key, auth.access_token.secret) api = tweepy.API(auth) user_fullname = api.me().name user_username = api.me().screen_name user = USER(fullname = user_fullname, twitter_username = user_username, twitter_oauth_token_key = auth.access_token.key, twitter_oauth_token_secret = auth.access_token.secret) user.put() taskqueue.add(url='/backup/past', method='GET') self.response.out.write('Your twitter account was successfully connected to socialtank.<br/>Backup process should start now... ') except tweepy.TweepError, e: self.response.out.write('Sorry, there occurred an error during the authorization process with twitter. Please clear your browser cache and try again.<br/>') self.response.out.write(e)
def backup(mode): user = get_user() if user: # authenticate for twitter auth = tweepy.OAuthHandler(config.twitter_consumer_token(), config.twitter_consumer_secret()) auth.set_access_token(user.twitter_oauth_token_key, user.twitter_oauth_token_secret) api = tweepy.API(auth) counter = 1 last_status = None statuses = None if mode == "past": statuses = tweepy.Cursor( api.user_timeline, id=user.twitter_username, max_id=user.backedup_last_id, count=helper.number_of_tweets_to_request_per_cycle(), ).items(helper.number_of_tweets_to_request_per_cycle()) elif mode == "present": statuses = tweepy.Cursor( api.user_timeline, id=user.twitter_username, since_id=user.backedup_first_id, count=helper.number_of_tweets_to_request_per_cycle(), ).items(helper.number_of_tweets_to_request_per_cycle()) # iterate over the last status object reveived for the timeline requested for status in statuses: current_tweet = None # check if this tweet is already partially written to the db if helper.does_tweet_exist(status.id): # fetch the already written status object from the db tweets = db.GqlQuery( "SELECT * FROM TWEETS WHERE tweet_id =:current_tweet_id LIMIT 1", current_tweet_id=status.id ) if tweets.count() >= 1: for tweet in tweets: if tweet: current_tweet = tweet else: # if someone else has deleted this entry in the meantime, just create a new one. current_tweet = TWEETS() else: # create a new TWEETS instance because there isn't anything there yet. current_tweet = TWEETS() # save the status to the db current_tweet.tweet_id = status.id current_tweet.message = status.text current_tweet.datetime = status.created_at current_tweet.client_used = status.source current_tweet.avatar = status.author.profile_image_url current_tweet.put() if counter == helper.number_of_tweets_to_request_per_cycle(): last_status = status.id else: counter = counter + 1 # not sure of there's an easier notation # save the last status_id to the user account in order not to backup the same things multiple times. user.backedup_last_id = last_status user.put() return True else: logging.error("no user was found in the database, please add one") return False