Example #1
0
def guide_flow():
    fname = utils.filter_from_origin('GuideFlow')
    id_dic = {}
    avatar_count = utils.get_avatar_count()
    with utils.utf8_open(fname) as fr:
        for line in fr:
            lo = LogOne.get_log_from_line(line)
            if not lo:
                continue
            
            id_dic.setdefault(lo.guide_id, set())
            id_dic[lo.guide_id].add(lo.gbid)
    
    rets = [(int(k), len(v)) for k, v in id_dic.items()]
    rets.sort(key=lambda x: x[0])
    csv = csv_output.CSVOutPut()
    csv.set(0, 0, '节点')
    csv.set(0, 1, '创角数')
    csv.set(0, 2, '节点通过人数')
    csv.set(0, 3, '节点通过率')
    idx = 1
    for key, num in rets:
        csv.set(idx, 0, key)
        csv.set(idx, 1, avatar_count)
        csv.set(idx, 2, num)
        csv.set(idx, 3, num / avatar_count)
        idx += 1
        
    out_name = utils.get_out_name('out', 'guide_flow.csv')
    csv.output(out_name)
Example #2
0
def main():
    fname = Filter.Filter.filter_login_log()

    filt = Filter.Filter(fname, None)
    tmp_log_name = filt.filter_out()

    player_dic = {}
    player_name_dic = {}
    out_name = utils.get_out_name('out', '1_20.txt')
    fw = utils.utf8_open(out_name, 'w')
    mark_set = set()
    with utils.utf8_open(fname, encoding='utf-8') as fr:
        for line in fr:
            log_one = LogOne.get_log_from_line(line)
            player_dic.setdefault(log_one.account, set())
            player_dic[log_one.account].add(log_one.day)

            player_name_dic.setdefault(log_one.account, set())
            try:
                player_name_dic[log_one.account].add(log_one.name)
            except:
                pass
            if len(player_dic[log_one.account]) >= 4:
                mark_set.add(log_one.account)

    count = 0
    for i in mark_set:
        names = player_name_dic[i]
        _2 = '|'.join(names)
        fw.write(','.join((i, _2)) + '\n')
        count += 1
    print(count)
Example #3
0
def parse_today_not_login():
    fname = log_one_utils.get_login_out_log_new()
    avatar_dic = {}
    with utils.utf8_open(fname) as fr:
        for line in fr:
            lo = LogOne.get_log_from_line(line)
            if not (const.FIRST_DAY <= lo.day <= const.FINAL_DAY):
                continue
            uk = lo.unique_key()
            if uk in avatar_dic:
                avatar_dic[uk].add_log(lo)
            else:
                avatar_dic[uk] = Avatar(uk, lo.level, lo.battle_point, lo)

    print(len(avatar_dic))
    csv = csv_output.CSVOutPut()
    csv.set(0, 0, 'GOPENID')
    csv.set(0, 1, '等级')
    csv.set(0, 2, '战力')
    csv.set(0, 3, '渠道号')
    idx = 1
    for av in avatar_dic.values():
        if 22 <= av.level <= 35 and (const.FINAL_DAY not in av.days):
            csv.set(idx, 0, f'{av.open_id}')
            csv.set(idx, 1, av.level)
            csv.set(idx, 2, av.battle_point)
            csv.set(idx, 3, av.login_channel)
            idx += 1
        
    fname = utils.get_out_name('out', 'today_not_login.csv')
    csv.output(fname)
Example #4
0
def parse_tlog():
    avatar_dic = get_avatar_dic()
    school_dic = {}
    for uk, avatar_val in avatar_dic.items():
        if not hasattr(avatar_val, 'school'):
            print('error not has school:', avatar_val.open_id,
                  avatar_val.create_from)
            continue
        school_dic.setdefault(avatar_val.school, {})
        school_dic[avatar_val.school][uk] = avatar_val

    csv = csv_output.CSVOutPut()
    schools = list(school_dic.keys())
    # 总的次留
    ret_list = get_stay_list(avatar_dic, True)
    for ii, stay in enumerate(ret_list):
        csv.set(ii + 1, 1, stay)

    # 根据职业的次留
    for index, school in enumerate(schools):
        csv.set(0, index + 2, school)
        stay_list = get_stay_list(school_dic[school], True)
        for _index, stay in enumerate(stay_list):
            csv.set(_index + 1, index + 2, stay)

    for i in range(utils.get_whole_days()):
        csv.set(i + 1, 0, f'{i + 1}留')

    out_name = utils.get_out_name('out', 'school.csv')
    csv.output(out_name)
Example #5
0
def get_openid_info_by_txt():
    # 根据openids.txt提供特定玩家信息
    avatar_dic = get_avatar_dic()
    csv = csv_output.CSVOutPut()
    csv.set(0, 0, 'openid')
    csv.set(0, 1, '次留')
    csv.set(0, 2, '三留')
    csv.set(0, 3, '七留')
    csv.set(0, 4, '首周登录天数')
    csv.set(0, 5, '战力')
    csv.set(0, 6, '等级')
    csv.set(0, 7, '哪一天登陆')
    idx = 0
    with utils.utf8_open(const.OPEN_IDS_TXT) as fr:
        for line in fr:
            idx += 1
            line = line.strip()
            if line in avatar_dic:
                a = avatar_dic[line]
                csv.set(idx, 0, line)
                csv.set(idx, 1, 1 if a.is_stay_by(1) else 0)
                csv.set(idx, 2, 1 if a.is_stay_by(2) else 0)
                csv.set(idx, 3, 1 if a.is_stay_by(6) else 0)
                csv.set(idx, 4, len(a.days))
                csv.set(idx, 5, a.battle_point)
                csv.set(idx, 6, a.level)
                csv.set(idx, 7, '|'.join(map(str, a.days)))

            else:
                print(line)
    out_name = utils.get_out_name('out', 'avatar_info_by_open_id_txt.csv')
    csv.output(out_name)
Example #6
0
def get_avatar_dic():  # 获得一个dic,里面每个玩家包含有自己登陆的天数
    avatar_dic = {}
    out_name = utils.get_out_name('tmp', 'avatar_days_dict')

    if os.path.exists(out_name):
        avatar_dic = pickle.load(open(out_name, 'rb'))
    else:
        fname = log_one_utils.filter_by_log_one_all()
        with utils.utf8_open(fname) as fr:
            for line in fr:
                lo = LogOne.get_log_from_line(line)
                if not lo:
                    continue

                if not (const.FIRST_DAY <= lo.day <= const.FINAL_DAY):
                    continue

                uk = lo.unique_key()  # 获取open_id
                if uk not in avatar_dic:
                    avatar_dic[uk] = Avatar(uk, lo.day, lo.FILTER_STR)

                avatar_val = avatar_dic[uk]
                avatar_val.add_day(lo.day)
                if lo.FILTER_STR == 'SecLogin':
                    avatar_val.add_school(lo.school)
                elif lo.FILTER_STR == 'PlayerLogin' or lo.FILTER_STR == 'PlayerLogout':
                    avatar_val.add_level(lo.level)
                    avatar_val.add_battle_point(lo.battle_point)
                    avatar_val.add_channel(lo.login_channel)

        pickle.dump(avatar_dic, open(out_name, 'wb'))
    return avatar_dic
Example #7
0
def get_header():
    dic = {}
    fname = utils.filter_from_origin('PlayerLogout')
    with utils.utf8_open(fname) as fr:
        for line in fr:
            lo = LogOne.get_log_from_line(line)
            if not lo:
                continue

            uk = lo.unique_key()
            if uk in dic:
                dic[uk].update_level(lo.level, lo.battle_point)
            else:
                dic[uk] = NewBieLeft(uk, lo.level, lo.login_channel,
                                     lo.battle_point)

    csv = csv_output.CSVOutPut()
    csv.set(0, 0, 'GOPENID')
    csv.set(0, 1, '等级')
    csv.set(0, 2, '战力')
    csv.set(0, 3, '渠道号')
    idx = 1
    for lo in dic.values():
        if lo.level > const.MAX_LEFT_LEVEL:
            continue

        csv.set(idx, 0, f'{lo.open_id}\'')
        csv.set(idx, 1, lo.level)
        csv.set(idx, 2, lo.battle_point)
        csv.set(idx, 3, lo.login_channel)
        idx += 1

    fname = utils.get_out_name('out', 'left_newbie_header.csv')
    csv.output(fname)
Example #8
0
def filter_by_log_one_all():
    fw_name = utils.get_out_name('tmp', 'log_one.log')
    if os.path.exists(fw_name):
        return fw_name

    fw = utils.utf8_open(fw_name, 'w')
    for line in utils.get_origin_line_stream():
        lo = LogOne.get_log_from_line(line)
        if not lo:
            continue

        fw.write(line)

    fw.close()
    return fw_name
Example #9
0
def get_login_out_log_new():
    fw_name = utils.get_out_name('tmp', 'log_and_out_new.log')
    if os.path.exists(fw_name):
        return fw_name

    fw = utils.utf8_open(fw_name, 'w')
    for line in utils.get_origin_line_stream():
        lo = LogOne.get_log_from_line(line)
        if not lo:
            continue

        if lo.FILTER_STR == 'PlayerLogin' or lo.FILTER_STR == 'PlayerLogout':
            fw.write(line)

    fw.close()
    return fw_name
Example #10
0
    def filter_login_log():
        dirname = utils.get_dir('tmp')
        fw_name = utils.get_out_name('tmp', 'log_in_and_out.log')
        if os.path.exists(fw_name):
            return fw_name

        fw = utils.utf8_open(fw_name, 'w', encoding='utf-8')
        for line in utils.get_origin_line_stream():
            if not (line.startswith('SecLogin')
                    or line.startswith('SecLogout')):
                continue

            fw.write(line)

        fw.close()
        return fw_name
Example #11
0
def filter_item_flow_by_src(src):
    fw_name = utils.get_out_name('tmp', f'itme_flow_{src}.log')
    if os.path.exists(fw_name):
        return fw_name

    fname = utils.filter_from_origin(LogOne.ItemFlow.FILTER_STR)
    fw = utils.utf8_open(fw_name, 'w')
    with utils.utf8_open(fname) as fr:
        for line in fr:
            lo = LogOne.get_log_from_line(line)
            if lo.src != src:
                continue

            fw.write(line)

    fw.close()
    return fw_name
Example #12
0
def bandit_boss():
    fname = log_one_utils.filter_resource_flow_by_src(65)
    days = {}
    with utils.utf8_open(fname) as fr:
        for line in fr:
            lo = LogOne.get_log_from_line(line)
            if lo.count != 200:
                continue

            days.setdefault(lo.day, set())
            days[lo.day].add(lo.unique_key())

    csv = csv_output.CSVOutPut()
    csv.set(0, 0, '日期')
    csv.set(1, 0, '人数')
    day_list = list(days.keys())
    day_list.sort()
    for idx, day in enumerate(day_list):
        csv.set(0, idx + 1, day)
        csv.set(1, idx + 1, len(days[day]))

    fw_name = utils.get_out_name('out', 'bandit_boss.csv')
    csv.output(fw_name)
Example #13
0
def get_avatar_login_5_days():
    # 获得登陆五天的玩家的相关信息
    avatar_dic = get_avatar_dic()
    csv = csv_output.CSVOutPut()
    csv.set(0, 0, 'OPENID')
    csv.set(0, 1, '等级')
    csv.set(0, 2, '战力')
    csv.set(0, 3, '渠道号')
    csv.set(0, 4, '登陆天')
    idx = 1
    for avatar_val in avatar_dic.values():
        if len(avatar_val.days) < 5:
            continue

        csv.set(idx, 0, avatar_val.open_id)
        csv.set(idx, 1, avatar_val.level)
        csv.set(idx, 2, avatar_val.battle_point)
        csv.set(idx, 3, avatar_val.channel)
        csv.set(idx, 4, '|'.join(map(str, (avatar_val.days))))
        idx += 1

    out_name = utils.get_out_name('out', 'login_5_days.csv')
    csv.output(out_name)
Example #14
0
 def output(self, filename):
     out_name = utils.get_out_name('out', filename)
     with utils.utf8_open(out_name, 'w', encoding='utf-8') as fw:
         for val in self.gbid_dic.values():
             val.deal_login()
             fw.write(val.get_avatar_info() + '\n')
Example #15
0
import const
import LogOne
import guild_train
import hour_stay
import left_newbie_header
import guide_flow
import bandit_boss

if __name__ == '__main__':
    fname = Filter.Filter.filter_login_log()

    filt = Filter.Filter(fname, None)

    print('-------------------------------------- 内部玩家次留统计')
    tmp_log_name = filt.filter_inner()
    out_name = utils.get_out_name('out', 'daily_inner.csv')
    parse_tlog.parse_tlog(tmp_log_name, out_name)

    print('-------------------------------------- 外部玩家次留统计')
    tmp_log_name = filt.filter_out()
    out_name = utils.get_out_name('out', 'daily_outer.csv')
    parse_tlog.parse_tlog(tmp_log_name, out_name)

    print('-------------------------------------- 帮盗统计')
    fname = utils.filter_from_origin('RoundFlow')
    f = Filter.Filter(fname, LogOne.RoundFlow)
    guild_bandit.parse_by_act(f, 9)

    print('-------------------------------------- 帮会修炼')
    fname = utils.filter_from_origin('GuildTrainFlow')
    f = Filter.Filter(fname, None)