Exemple #1
0
 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('/')
Exemple #2
0
 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)