Exemple #1
0
 def get(self):
     if self.get_current_user() is not None:
         user = User.get_by_key_name(self.user["uid"])
         if user is not None:
             try:
                 dobot = DoubanRobot(user.douban_key, user.douban_secret)
                 dobot.get_current_user()
                 self.redirect("/auth/weibo/")
             except Exception,e:
                 pass
Exemple #2
0
    def get(self):
        uid = self.get_session("uid") 
        if uid is not None:
            self.redirect("/option/")
        
        doubanbot = DoubanRobot(key=DB_API_KEY, secret=DB_API_SECRET)

        callback = self.request.get("callback").strip()
        if callback == "true":
            token_key = self.get_session("token_key")
            token_secret = self.get_session("token_secret")
            key, secret, uid = doubanbot.get_access_token(token_key, token_secret)
            if key:
                doubanbot.login(key, secret)
                self.set_session("access_key", key)
                self.set_session("access_secret", secret)
                
            account = doubanbot.get_current_user()
            #self.render("msg.html", {"msg":"墙挡住了我和豆瓣,等会儿再试试吧", "url":"/"})
            #    return
            
            self.set_session("uid", account["uid"])
            self.set_session("name", account["name"])
            
            self.redirect("/")
        
        try:
            key, secret = doubanbot.get_request_token()
            self.set_session("token_key", key)
            self.set_session("token_secret", secret)
            douban_url = doubanbot.get_authorization_url(key, secret, self.request.url+"?callback=true")
        except Exception,e:
            logging.info(e)
            self.render("msg.html", {"msg":"墙挡住了我和豆瓣,等会儿再试试吧", "url":"/"})
            return
Exemple #3
0
def fetch(uid):
    user = User.get_by_key_name(uid)
    if not user:
        return
    doubanbot = DoubanRobot(user.douban_key, user.douban_secret)
    weibobot = WeiboRobot(user.weibo_key, user.weibo_secret)
    
    entries = doubanbot.get_miniblogs()
    #entries.sort(cmp=lambda x,y: cmp(x.time, y.time))
        
    if not entries:
        user.sync_time = datetime.datetime.now() + datetime.timedelta(seconds=TIME_DELTA)
        user.put()
        return
    cnt = 0
    for entry in reversed(entries):
        if (not user.last_id) or (entry.id > user.last_id):
            try:
                cnt += 1
                weibobot.send(entry.to_send)
            except WeibopError, e:
                # handle error: user has revoked access privilege to this application
                if e.reason.find("40072") != -1:
                    logging.info("Delete binding, because user has revoked access privilege for this application from Sina: " + e.reason);
                    user.delete()
                    return
                # 40028 indicates that the tweet is duplicated or user is in black list
                if e.reason.find("40028") != -1 or e.reason.find("40308") != -1:
                    if e.reason.find("有关部门") != -1:
                        #您输入的网址被有关部门列为恶意网址,无法发表,请谅解。
                        logging.info(entry.to_send)
                        continue
                    logging.info("User is in black list? Skip this tweet and temporary disable sync for 1 hour. " + e.reason)
                    user.sync_time = datetime.datetime.now() + datetime.timedelta(seconds=3600)
                    if cnt>0:
                        user.last_id = entries[-(cnt-1)].id
                    user.put()
                    return
                # ignore "repeated weibo text" error
                if e.reason.find("40025") != -1:
                    logging.info("Error ignored: " + e.reason)
                else:
                    # other error
                    pass
Exemple #4
0
    def post(self):
        uid = self.request.get("uid")
        email = self.request.get("email")
        title = self.request.get("title")
        access_key = self.request.get("access_key")
        access_secret = self.request.get("access_secret")
        recv = eval(self.request.get("recv"))
        start = self.request.get("start")
        count = self.request.get("count")
        total = self.request.get("total")
        
        doubanbot = DoubanRobot(key=DB_API_KEY, secret=DB_API_SECRET)
        doubanbot.login(access_key, access_secret)
        mail_list = doubanbot.get_mails(recv=recv, start=start, cnt=count, uid=uid, name=title)
        if not mail_list:
            if recv:
                # fetch send doumail
                self.add_fetch_task(uid, email, title, access_key, access_secret, False, 1, 35, 0, 0)
                return
            else:
                # fetch done. send backup to user's email
                mail_list = db.GqlQuery("SELECT * FROM Mail WHERE uid=:1 AND recv=:2", uid, True)
                recvmails = self.render_string("doumail.txt", {"mails":mail_list})
                db.delete(mail_list)

                mail_list = db.GqlQuery("SELECT * FROM Mail WHERE uid=:1 AND recv=:2", uid, False)
                sendmails = self.render_string("doumail.txt", {"mails":mail_list})
                db.delete(mail_list)
                
                mail.send_mail(sender=ADMIN_MAIL,
                               to=email,
                               subject="豆邮备份",
                               body="""
                               你的豆邮备份
                               """,
                               attachments=[("收件箱.txt",recvmails),("发件箱.txt",sendmails)])
                return
        
        self.add_fetch_task(uid, email, title, access_key, access_secret, recv, int(start)+int(count), count, int(total)+int(count), 60)