def send_msg(email_list, keyword, name, content): """ : keyword: key word for searching news : name: weibo account : content : a dict contain search results, such as {"news"[news1, news2], "weibo": weibo} """ for email in email_list: if content.has_key("news") and content["news"]: send_news = need_send_news(email, keyword, content["news"]) logger.debug("need to send %d news" % len(send_news)) if send_news: news_str = gen_news_str(send_news) subject = "%s 有新消息了^-^" % '+'.join(keyword) cur_time = int(time.time()) send_mail(email, subject, news_str) AccountSetting.update_email_time(email, keyword, cur_time) if content.has_key("weibo") and content["weibo"]: send_weibo = need_send_weibo(email, name, content["weibo"]) if send_weibo: weibo_str = gen_weibo_str(name, send_weibo) subject = keyword + " 有新的微博动态了^-^" send_mail(email, subject, news_str) cur_time = int(time.time()) AccountSetting.update_email_time(email, name, cur_time)
def get(self): word = self.get_argument('word', '').split(" ") start_time = time.time() result = get_msg(keyword=word) end_time = time.time() result = gen_news_str(result["news"])# + gen_weibo_str(result["weibo"]) logger.debug("found result: %s" % result) logger.debug("this search took %s seconds" % (end_time-start_time)) self.write('''<html><body>'''+result.replace("\n", "<br>")+'''</body></html>''')
def can_send_news(keyword, news_list): """ return new news and last day news : keyword: key word in once search news : news_list: news results(a list) of searching , must contain title,content,time,url """ send_news = [] current_time = int(time.time()) logger.debug("found %s news" % len(news_list)) for news in news_list: ret, is_created = News.create(keyword, news) print ret["time"], is_created, current_time - MAX_LONG_TIME print "ret=",ret if not is_created and ret["time"] < current_time - MAX_LONG_TIME: continue send_news.append(news) return send_news
def get_msg(keyword=None, name=None): """ return grab message and took some filter(如果新闻或微博内容数据库中木有,则返回; 如果有且发布时间在MAX_LONG_TIME 以内,也返回;其他过滤掉) : keyword: key word list for searching news : name: weibo account """ try: if not keyword and not name: return {} send_contents = {} news_list = search_news(keyword) send_contents["news"] = can_send_news(keyword, news_list) logger.debug("can send %d news after filtered" % len(send_contents["news"])) # if name: # weibo = search_weibo(name) # ret = can_send_weibo(name, weibo) # if ret: # send_contents["weibo"] = ret return send_contents except Exception, e: logger.error(traceback.format_exc(e)) return {}