def post(self): # New user has joined in. Follow him and post a welcome message try: sms_client = OAuthClient('twitter', self) sms_client.token = OAuthAccessToken.all().filter( 'specifier =', 'smstweetin').filter( 'service =', 'twitter').fetch(1)[0] user = self.request.get('screen_name') count = int(self.request.get('count')) info = sms_client.post('/friendships/create', 'POST', (200,401,403), screen_name=user) # TODO : this may fail, try three times # Stop sending the follow status #status = "@%s has started using SMSTweet. Welcome %s to the group and tell about us to your friends" % (user, user) #info = sms_client.post('/statuses/update', 'POST', (200,401), status=status) # TODO : this may fail, try three times sms_client.token = OAuthAccessToken.all().filter( 'specifier =', user).filter( 'service =', 'twitter').fetch(1)[0] info = sms_client.post('/friendships/create', 'POST', (200,401,403), screen_name='smstweetin') # TODO : this may fail, try three times except (urlfetch.DownloadError, ValueError, Timeout), e: logging.warning("SmsTweetin:Friendship/create failed (%d) %s" % (count,e)) if count > 10: logging.error("SmsTweetin:Friendship/create Finally giving up") else: # Try again taskqueue.add(url = '/tasks/follow_new_user', params = { 'screen_name' : user, 'count' : count + 1 })
def TweetHandler(self): """tweeting does not tweet from localhost""" self.response.out.write('<br/><br/>Tweeting<br/>') self.response.out.write('this info will be tweeted:<br/>') # oldest non-tweeted and prepared oldest_changeset = Changeset.all().order('created_at').filter('is_tweeted =', False).filter('is_prepared =', True).fetch(1) if not oldest_changeset: self.response.out.write('nothing to tweet') return else: c = oldest_changeset[0] config = get_config() # do not tweet from localhost if not 'localhost' in self.request.url: auth = tweepy.OAuthHandler(config["consumer_key"], config["consumer_secret"]) auth_data = OAuthAccessToken.all().filter('specifier =', config["twitter_username"]).fetch(1)[0] auth.set_access_token(auth_data.oauth_token, auth_data.oauth_token_secret) self.response.out.write('<br/>tweeting with oauth:<br/>') api = tweepy.API(auth) self.response.out.write("id: %d" % c.id) self.response.out.write("user: %s" % c.user) self.response.out.write("comment: %s" % c.comment) self.response.out.write("tweet: %s" % c.tweet) try: api.update_status(c.tweet) except tweepy.error.TweepError, e: self.response.out.write( 'failed: %s' % e.reason ) if "Status is a duplicate" in e.reason: c.is_tweeted = True c.put() return
def get(self): verifier = self.request.get("oauth_verifier", "") oauth_token = self.request.get("oauth_token", "") auth_client = _oauth(self) request_token = OAuthRequestToken.all().filter('oauth_token =', oauth_token).filter('service =', SERVICE).fetch(1)[0] auth_client.set_request_token(request_token.oauth_token, request_token.oauth_token_secret) access_token = auth_client.get_access_token(verifier) key_name = create_uuid() username = auth_client.get_username() old = OAuthAccessToken.all().filter( 'specifier =', username).filter( 'service =', SERVICE) if old.count() > 0: db.delete(old) OAuthAccessToken(key_name=key_name, service=SERVICE, oauth_token = access_token.key, oauth_token_secret = access_token.secret, specifier = username).put() auth_client.set_cookie(key_name) #self.response.out.write(username) self.redirect("/oauth/weibo/newuser")
def update_weibo(gruser, message): access_token = OAuthAccessToken.all().filter("specifier = ",gruser.username).fetch(1)[0] auth_client = _oauth() auth_client.setToken(access_token.oauth_token, access_token.oauth_token_secret) api = API(auth_client, source = "Reader2微博") api.update_status(message)