def get(self): site = GetSite() member = CheckAuth(self) if member: if member.twitter_oauth == 1: template_values = {} template_values['site'] = site template_values['rnd'] = random.randrange(1, 100) template_values['member'] = member l10n = GetMessages(self, member, site) template_values['l10n'] = l10n template_values[ 'page_title'] = site.title + u' › Twitter › Mentions' access_token = OAuthToken.from_string( member.twitter_oauth_string) twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token) rate_limit = memcache.get( str(member.twitter_id) + '::rate_limit') if rate_limit is None: try: rate_limit = twitter.GetRateLimit() memcache.set( str(member.twitter_id) + '::rate_limit', rate_limit, 60) except: logging.info('Failed to get rate limit for @' + member.twitter_screen_name) template_values['rate_limit'] = rate_limit cache_tag = 'member::' + str( member.num) + '::twitter::mentions' statuses = memcache.get(cache_tag) if statuses is None: statuses = twitter.GetReplies() i = 0 for status in statuses: statuses[i].source = statuses[i].source.replace( '<a', '<a class="dark"') statuses[i].datetime = datetime.datetime.fromtimestamp( time.mktime( time.strptime(status.created_at, '%a %b %d %H:%M:%S +0000 %Y'))) statuses[i].text = twitter.ConvertMentions(status.text) #statuses[i].text = twitter.ExpandBitly(status.text) i = i + 1 memcache.set(cache_tag, statuses, 120) template_values['statuses'] = statuses path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'twitter_mentions.html') output = template.render(path, template_values) self.response.out.write(output) else: self.redirect('/settings') else: self.redirect('/')
def post(self, request): message = xmpp.Message(self.request.POST) to = extract_address(message.to.lower()) sender = extract_address(message.sender.lower()) member = GetMemberByEmail(sender) if member: if member.twitter_oauth == 1: access_token = OAuthToken.from_string(member.twitter_oauth_string) twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token) status = message.body result = None if len(status) > 140: status = status[0:140] try: if message.command is not None: command = message.command.lower() if command == 'mentions' or command == 'm' or command == 'r': logging.info('About to get mentions for @' + member.twitter_screen_name) statuses = twitter.GetReplies() msg = '' i = 0 for s in statuses: msg = msg + '@' + s.user.screen_name + ': ' + s.text + "\n\n" i = i + 1 if i > 5: break xmpp.send_message(message.sender, msg) if command == 'search' or command == 'q' or command == 's': q = re.findall('/' + command + ' (.+)', message.body)[0] url = 'http://twitter.com/search.json?q=' + urllib.quote(q) response = urlfetch.fetch(url) logging.info(response.status_code) data = json.loads(response.content) msg = '' i = 0 for s in data['results']: msg = msg + '@' + s['from_user'] + ': ' + s['text'] + "\n\n" i = i + 1 if i > 5: break xmpp.send_message(message.sender, msg) else: if status.lower() == 'ls': logging.info('About to get home timeline for @' + member.twitter_screen_name) statuses = twitter.GetHomeTimeline(count = 5) msg = '' i = 0 for s in statuses: msg = msg + '@' + s.user.screen_name + ': ' + s.text + "\n\n" xmpp.send_message(message.sender, msg) else: logging.info("About to send tweet: " + status) result = twitter.PostUpdate(status.encode('utf-8')) logging.info("Successfully tweet: " + status) except: logging.error("Failed to tweet for " + member.username) if result is not None: msg = 'OK: http://twitter.com/' + result.user.screen_name + '/status/' + str(result.id) xmpp.send_message(message.sender, msg) else: logging.error("User " + sender + " doesn't have Twitter link.") else: logging.error("Cannot find a corresponding member for " + message.sender)