示例#1
0
文件: tasks.py 项目: mayanks/smstweet
  def post(self):
    status = self.request.get('status')
    phone = self.request.get('phone')
    count = int(self.request.get('count'))

    tuser = TwitterUser.get_by_phonenumber(phone)
    if tuser == None:
      logging.warning("Could not fetch tuser based on phone number %s",phone)
      return

    client = OAuthClient('twitter', self)
    try:
      info = client.post('/statuses/update', 'POST', (200,401,403), tuser, status=status)
      if 'error' in info:
        logging.warning("Submiting failed as credentials were incorrect (user:%s) %s", tuser.user, info['error'])
        tuser.lastError = "Twitter returned '%s' for your last update. You may be over limit or may have to register with SMSTweet again" % info['error']
        tuser.put()
      else:
        logging.debug("updated the status for user %s", tuser.user)
        Tweet.save_tweet(info)

    except (urlfetch.DownloadError, ValueError), e:
      logging.warning("Update:update (%d) could not be fetched. %s " % (count,e))
      if count > 10:
        logging.error("Tried updating the message 10 times. Finally giving up.")
      else:
        # Try again
        taskqueue.add(url = '/tasks/post_message', params = { 'phone' : phone, 'count' : count + 1, 'status' : status })
示例#2
0
文件: tasks.py 项目: mayanks/smstweet
  def fetch_status(self,type,key_name, url):
    phone = self.request.get('phone')    
    tuser = TwitterUser.get_by_phonenumber(phone)
    if tuser == None:
      logging.warning("Could not fetch tuser based on phone number %s",phone)
      return

    since_id = memcache.get("%s%s" % (key_name,tuser.user))
    if not since_id:
      since_id = -1
      memcache.add("%s%s" % (key_name,tuser.user), since_id)

    client = OAuthClient('twitter', self)
    try:
      info = client.get(url, 'GET', (200,401,403), tuser, since_id=since_id, count = 10)
      if 'error' in info:
        logging.warning("%s Fetch failed for %s because of %s" % (type,tuser.user, info['error']))
      elif len(info) > 0:
        logging.debug("fetched %d %s's for %s" % (len(info), type,tuser.user))
        memcache.replace("%s%s" % (key_name,tuser.user), info[0]['id'])
        if type == 'DM':
          for dm in info: TweetDM.create(dm['sender_screen_name'],tuser.user, dm['text'], dm['created_at'], dm['id'])
        else:
          for dm in info: TweetMention.create(dm['user']['screen_name'],tuser.user, dm['text'], dm['created_at'], dm['id'])
        #endif
      #endif
    except (urlfetch.DownloadError, ValueError), e:
      logging.warning("%s: could not be fetched. %s " % (type,e))
示例#3
0
  def registerUserOld(self, phoneno, user_name, passwd):
    basic_auth = base64.encodestring('%s:%s' % (user_name, passwd))[:-1]
    request_headers = {}
    request_headers['Authorization'] = 'Basic %s' % basic_auth

    try:
      logging.debug("getting account credentials for user %s",user_name)
      resp = urlfetch.fetch('http://twitter.com/account/verify_credentials.json', headers = request_headers, deadline = 10)

      if resp.status_code == 200:
        logging.debug("user name and password are correct for %s", user_name)
        info = decode_json(resp.content)
        tuser = TwitterUser.create_by_phonenumber(phoneno, info['screen_name'], passwd)
        logging.debug("Stored user_name %s as against provided user name %s" % (info['screen_name'], user_name))
        dstat = DailyStat.get_by_date()
        dstat.new_user()

        self.response.out.write("Congratulations !! Your twitter username is registered. Go ahead and send a twitter message by SMSing \"tweet <your twitter status\"")
      else:
        logging.warning("Submiting failed %d and response %s\n", resp.status_code,resp.content) 
        self.response.out.write("Incorrect username/password. Note that both username and password are case sensitive. Better register online at http://www.smstweet.in") 

    except urllib2.URLError, e:
      logging.error("Update: Post to twitter failed\n")
      self.response.out.write("Server error while posting the status. Please try again.\n")
示例#4
0
文件: main.py 项目: mayanks/smstweet
 def get(self):
     tusers = TwitterUser.all().fetch(1000)
     error_users = []
     for t in tusers:
         if len(t.phonenumber) != 12:
             error_users.append(t)
     values = {"tweeters": error_users}
     self.response.out.write(template.render("test.html", values))
示例#5
0
文件: main.py 项目: mayanks/smstweet
    def get(self):
        tusers = TwitterUser.all().filter("tweetCount >", 0).order("-tweetCount").fetch(40)
        tweets = Tweet.all().order("-created_at").fetch(10)
        regexp = re.compile("@(\w+)")
        for t in tweets:
            t.status = regexp.sub(r"<a href='/user/\1'>@\1</a>", t.status)

        values = {"highestTweeters": tusers, "tweets": tweets}
        self.response.out.write(template.render("stats.html", values))
示例#6
0
  def registerUser(self, phoneno, user_name, passwd):
    client = OAuthClient('twitter', self)
    token = client.get_xauth_token(user_name, passwd)
    if token:
      tuser = TwitterUser.create_by_phonenumber(phoneno, token.specifier)
      tuser.accessTokenid = '-1'
      tuser.put()
      dstat = DailyStat.get_by_date()
      dstat.new_user()

      self.response.out.write("Congratulations !! Your twitter username is registered. Go ahead and send a twitter message by SMSing \"twt <your twitter status\"")
    else:
      logging.warning("Failed to get token for user %s with passwd %s\n" % (user_name, passwd )) 
      self.response.out.write("Incorrect username/password. Note that both username and password are case sensitive. Better register online at http://www.smstweet.in") 
示例#7
0
def is_active_user(self):
  self.keyword = self.request.get('keyword')
  self.content = self.request.get('content')
  self.phoneno = self.request.get('msisdn')
  if self.phoneno == None or self.content == None:
    self.response.out.write("Please provide both msisdn and content")
    return False

  # Check if the phoneno is registerd and is active
  self.tuser = TwitterUser.get_by_phonenumber(self.phoneno)
  if self.tuser and self.tuser.active:
    return True 

  logging.warning("Unregistered user tried to get their updates")
  self.response.out.write("SMSTweet: This command works only for registered users. Register at http://www.smstweet.in")
  return False
示例#8
0
文件: main.py 项目: mayanks/smstweet
    def get(self, user=""):
        tuser = tweets = None
        if user == "":
            self.redirect("/stats")
            return

        tusers = TwitterUser.all().filter("user = "******"screen_name = ", tuser.user).order("-created_at").fetch(10)

            regexp = re.compile("@(\w+)")
            for t in tweets:
                t.status = regexp.sub(r"@<a href='/user/\1'>\1</a>", t.status)
            values = {"tuser": tuser, "tweets": tweets}
            self.response.out.write(template.render("tuser.html", values))
        else:
            self.redirect("http://twitter.com/%s" % user)
示例#9
0
  def get(self):
    phonecode = self.request.get('phonecode')
    keyword = self.request.get('keyword')
    location = self.request.get('location')
    carrier = self.request.get('carrier')
    self.content = self.request.get('content')
    self.phoneno = self.request.get('msisdn')
    if self.phoneno == None or self.content == None:
      self.response.out.write("Please provide both msisdn and content")
      return

    # Check if the phoneno is registerd and is active
    tuser = TwitterUser.get_by_phonenumber(self.phoneno)
    r = re.compile('^\s*twe*t\s*',re.I)
    self.content = r.sub('',self.content)
    if tuser and tuser.active:
      if len(self.content) == 0:
        self.response.out.write("Dude !! where is the message to be sent? Hit the send message too fast")
        return

      if re.match("^register", self.content, re.I): # if content starts with register
        self.response.out.write("Your message cannot start with register as it is a keyword\n")
        return

      updated = False
      status = self.content[0:139]  # makes sure status is 140 chars long
      self.updateStatuswithToken(tuser, status)

      try:
        dstat = DailyStat.get_by_date()
        dstat.new_tweet()

        tuser.incr_counter(location,carrier)

        tuser.fetch_mentions_and_dms()
        Stats.updateCounter(tuser.user)
        
      except Timeout, e:
        logging.warning("Timed out logging the stats !! never mind")
      except DeadlineExceededError, e:
        logging.error("Deadline exceeded while logging the stats !! never mind")
示例#10
0
文件: main.py 项目: mayanks/smstweet
                    "/account/verify_credentials", expected_status=(200, 401)
                )  # TODO : this may fail, try three times
                if "error" in info:
                    client.expire_cookie()
                else:
                    user_name = info["screen_name"]
            except (urlfetch.DownloadError, ValueError), e:
                server_error = True
                logging.warning("Home:Credentials could not be fetched. %s " % e)
            except Timeout, e:
                server_error = True
                logging.warning("Timedout(Home) : Never mind")

        if user_name:
            tuser = None
            tusers = TwitterUser.all().filter("user = "******"91%s" % phoneno
                if tuser:
                    if tuser.phonenumber != phoneno:
                        oldTweetCount = tuser.tweetCount
                        tuser.delete()
                        tuser = TwitterUser.create_by_phonenumber(phoneno, user_name)
                        tuser.tweetCount = oldTweetCount