def update_3109(self, today=None): global logger_track today = today or datetime.today() one_week_before, three_month_before = today - timedelta(days=8), today - timedelta(days=90) types = ['free', 'charge', 'grossing'] genres = self.__get_genres() for t in types: for g in genres: outstanding_apps_candidates = [item['_id'] for item in list(self.mongo.trend.appstore_rank.aggregate([ {'$match': {'date': {'$gt': one_week_before, '$lte': today}, 'rank': {'$lte': 10}, 'type': t, 'genre': g}}, {'$group': {'_id': '$trackId', 'times': {'$sum': 1}}}, {'$match': {'times': {'$gte': 7}}}]))] def previous_perform_poorly(track_id): top_rank = list(self.mongo.trend.appstore_rank.find({'trackId': track_id, 'type': t, 'genre': g, 'date': {'$gt': three_month_before, '$lte': one_week_before}} ).sort([('rank', 1)]).limit(10)) return top_rank[-1]['rank'] > 30 if top_rank else True outstanding_apps = filter(previous_perform_poorly, outstanding_apps_candidates) for track_id in outstanding_apps: for aid in dbutil.get_artifacts_from_iOS(self.db, track_id): cid = dbutil.get_artifact_company(self.db, aid) corp_round = dbutil.get_company_round(self.db, cid) if corp_round < 1060: msg = u'%s旗下 %s 近期在AppStore%s排名表现突出' % \ (dbutil.get_company_name(self.db, cid), self.__normalize_iOS_name(dbutil.get_artifact_name(self.db, aid)), self.__get_rank_name(g, t)) detail = '%s,%s' % (g, t) dbutil.update_continuous_company_message(self.db, cid, msg, 3109, 30, aid, 7, detail) logger_track.info('3109, %s, %s, %s, %s' % (cid, aid, t, g))
def track_2004(self, logger=None): """ update every day """ yesterday = datetime.now() - timedelta(days=1) for record in list( self.mongo.market.itunes.find({ 'offline_itunes': 'Y', 'offlineitunesDetectTime': { '$gt': yesterday } })): for aid in dbutil.get_artifacts_from_iOS(self.db, record['trackId']): cid = dbutil.get_artifact_company(self.db, aid) aname = dbutil.get_artifact_name(self.db, aid) msg = u'%s的一款iOS应用%s下架' % \ (dbutil.get_company_name(self.db, cid), self.normalize_artifact_name(aname)) feed_back = dbutil.update_daily_company_message(self.db, cid, msg, 2004, 20, aid, yesterday, comments=aname) if feed_back: self.send_company_message_msg(feed_back) if logger: logger.info('2004, %s, mysql: %s' % (cid, feed_back))
def __process_artifact_2002_2003(self, aid, new_version, old_versions, yesterday, logger, market): cid = dbutil.get_artifact_company(self.db, aid) aname = dbutil.get_artifact_name(self.db, aid) if self.__import_update(new_version, old_versions): msg = u'%s的一款%s应用%s有重大版本%s更新' % \ (dbutil.get_company_name(self.db, cid), market, self.normalize_artifact_name(aname), new_version) feed_back = dbutil.update_detail_company_message( self.db, cid, msg, 2002, 20, aid, new_version, comments='version: %s, %s' % (new_version, aname)) else: msg = u'%s的一款%s应用%s发布了新版本%s' % \ (dbutil.get_company_name(self.db, cid), market, self.normalize_artifact_name(aname), new_version) feed_back = dbutil.update_detail_company_message( self.db, cid, msg, 2003, 20, aid, new_version, comments='version: %s, %s' % (new_version, aname)) if feed_back: self.send_company_message_msg(feed_back) if logger: logger.info('2002/2003, %s, mysql: %s' % (cid, feed_back))
def track_2001(self, logger=None): """ update every day """ yesterday = datetime.now() - timedelta(days=1) # day_gap = (datetime.now() - timedelta(days=self.max_2001_release_gap)).strftime('%Y-%m-%dT%H:%M:%SZ') day_gap = datetime.now() - timedelta(days=self.max_2001_release_gap) for aid, cid, atype, domain in dbutil.get_artifacts_by_date( self.db, yesterday): if logger: logger.info('Processing, aid %s, cid %s, type %s, domain %s' % (aid, cid, atype, domain)) if not self.__valid_artifact_release_date(atype, domain, day_gap): return aname = dbutil.get_artifact_name(self.db, aid) msg = u'%s发现了一款新的%s应用 %s' % \ (dbutil.get_company_name(self.db, cid), dbutil.get_artifact_type(self.db, aid, string=True), self.normalize_artifact_name(aname)) feed_back = dbutil.update_daily_company_message(self.db, cid, msg, 2001, 20, aid, yesterday, comments=aname) if feed_back: self.send_company_message_msg(feed_back) if logger: logger.info('2001, %s, mysql: %s, check date %s' % (cid, feed_back, yesterday))
def update_3108(self, todays, yesterdays, today): global logger_track newout = {} todays = set(item['trackId'] for item in todays) day_thirday = today - timedelta(days=30) for item in filter(lambda x: x['trackId'] not in todays, yesterdays): self.mongo.temp.appstore.insert_one({'type': 3108, 'createTime': today, 'item': item}) for aid in dbutil.get_artifacts_from_iOS(self.db, item['trackId']): newout[aid] = item for aid, item in newout.items(): cid = dbutil.get_artifact_company(self.db, aid) msg = u'%s旗下 %s跌出iOS%s前100名' % \ (dbutil.get_company_name(self.db, cid), self.__normalize_iOS_name(dbutil.get_artifact_name(self.db, aid)), self.__get_rank_name(item['genre'], item['type'])) detail = '%s,%s' % (item['genre'], item['type']) comments = dbutil.get_artifact_name(self.db, aid) yield dbutil.update_daily_company_message(self.db, cid, msg, 3108, 30, aid, day_thirday, detail, comments) logger_track.info('3108, %s, %s' % (cid, aid))
def __process_artifact_2005(self, aid, yesterday, logger): cid = dbutil.get_artifact_company(self.db, aid) aname = dbutil.get_artifact_name(self.db, aid) msg = u'%s的一款%s应用%s超过90天未更新' % \ (dbutil.get_company_name(self.db, cid), dbutil.get_artifact_type(self.db, aid, True), self.normalize_artifact_name(aname)) feed_back = dbutil.update_daily_company_message(self.db, cid, msg, 2005, 20, aid, yesterday, comments=aname) if feed_back: self.send_company_message_msg(feed_back) if logger: logger.info('2005, %s, mysql: %s' % (cid, feed_back))