def broadcastTopic(topicTitle): try: logger.debug(u'Start broadcast topic:%s' % topicTitle) topic = djangodb.Topic.objects.get(title=topicTitle) if topic.alive(): topic_news = topic.news_set.all()[0] else: logger.warn(u'topic:%s is already dead, add unsubscribe task!' % topicTitle) djangodb.add_task(topic=topic, type=u'unsubscribe') return False except: logger.exception(u'topic or news may not exist in database') return False alreadyFetchedWeibos = topic.relevant_weibo.all() fetchedWeibos = weibo.getRelevantWeibo(topicTitle=topicTitle, count=50)['statuses'] logger.info(u'feteched %d weibo about topic:%s' % (len(fetchedWeibos), topicTitle)) for awb in fetchedWeibos: aweibo = djangodb.get_or_create_weibo(awb) if aweibo.comments_count < 200 and aweibo in alreadyFetchedWeibos: # 这条微薄已经推广过了,由于时间关系,后续的微薄理论上也应该推广过了 continue break else: topic.relevant_weibo.add(aweibo) auser = djangodb.get_or_create_account_from_weibo(awb['user']) if aweibo.comments_count < 200 and auser in topic.watcher.all(): # 该用户已经使用服务,不需要推广 continue if aweibo.comments_count < 200 and len(auser.remind_history.strip()) > 0: # 已经推广过至少一次或正在使用服务 continue topic.relevant_user.add(auser) # 评论推广 _shorturl = weibo.getShortUrl(Conf.get_timeline_url(topic.id)) reqInterval(10) msg = u'#%s# %s 『%s』 ^ ^' % (topicTitle, topic_news.title, _shorturl) try: weibo.postComment(weibo_id=aweibo.weibo_id, content=msg) except APIError, err: logger.warn(u'comment failed:\t%s' % (err.error)) if err.error == u'target weibo does not exist!': topic.relevant_user.remove(auser) topic.relevant_weibo.remove(aweibo) aweibo.delete() logger.info(u'remove relevant user:%s and delete weibo:%s' % (auser, aweibo)) except:
logger.info(u"mention:%s" % mention) # step 1: 提取并构造微博对象 mweibo = djangodb.get_or_create_weibo(mention) if "retweeted_status" in mention: is_retweeted = True mweibo_retweeted = djangodb.get_or_create_weibo(mention[u"retweeted_status"]) # 过滤掉用户转发自己的微薄 # TODO 如果用户转发自己微薄重新订阅,则需要再设计 if mweibo_retweeted.user.weiboId == mweibo.user.weiboId: continue else: is_retweeted = False logger.info(u"weibo:%s\nis_retweeted:%s" % (mweibo, is_retweeted)) # step 2: 提取并构造用户对象 muser = djangodb.get_or_create_account_from_weibo(mention[u"user"]) if muser.is_robot(): logger.warn(u"robot user:%s" % muser) continue else: logger.info(u"step3: muser:%s" % muser) # step 3: 提取话题相关的信息 mtopictitle = None _search_content = mweibo.text if is_retweeted: _search_content += " / %s" % mweibo_retweeted.text topic_res = re.search(u"#([^#]+)#", _search_content) if topic_res: # 只能订阅一个话题,第一个井号标识的话题 mtopictitle = topic_res.group(1)