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
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
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
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)