使用第三方 API 写了个 LOL 演员识别器

2016-05-25 10:50:18 +08:00
 hard2reg
# -*- coding:utf-8 -*-

import daiwan
import time

class Actor(object):

    def __init__(self, name, area):
        self.ranks = []
        self.name = name
        self.area_id = areas[area]
        tmp = daiwan.getUserArea(self.name)
        for x in tmp['data']:
            if x['area_id'] == self.area_id:
                # 1 钻石 6 大师 0 王者
                if x['tier'] in (1, 6, 0):
                    self.qquin = x['qquin']
                else:
                    print('\n 测试版本只允许分析钻石以上段位!')
                    input()
                    exit()
                return
        print('\n 玩家 ID 不存在!')
        input()
        exit()

areas = {}
judgements = ['挂机局', '浪输局', '甩锅局']

def init():

    daiwan.init('API 账号', 'API 密码')
    daiwan.getToken()
    tmp = daiwan.getArea()
    for x in tmp:
        areas[x['name']] = int(x['id'])

def isActor(name, area):
    jd = 0
    person = Actor(name, area)
    print('\n 分析中 0%', end='\r')
    p = 1
    while True:
        tmp = daiwan.getCombatList(person.qquin, person.area_id, p)
        for x in tmp:
            if x['game_type'] == '4' and x['game_mode'] == '4':
                person.ranks.append(x)
        if len(person.ranks) >= 10:
            break
        else:
            p += 1
    players = {}
    b = 0
    i = 0
    all = len(person.ranks)
    for combat in person.ranks:
        i += 1
        tmp = daiwan.getGameDetail(person.qquin, person.area_id, combat['game_id'])
        time.sleep(0.5)
        for player in tmp['data'][0]['battle']['gamer_records']:
            if combat['result'] == '胜利' and player['winclass'] == 'active' and player['qquin'] != person.qquin:
                if player['name'] not in players:
                    players[player['name']] = 1
                else:
                     players[player['name']] += 1
            elif combat['result'] == '失败' and player['winclass'] == 'active':
                if player['name'] not in players:
                    players[player['name']] = 1
                else:
                    players[player['name']] += 1
        if combat['result'] == '失败' and combat['judgement'] in judgements:
            b += 1
        percent = (i / all) * 100
        print('分析中 %d%%' % percent, end='\r')
    a = max(players.values())
    rate = (a * 0.02 + b * 0.01) * 100
    print('%s 是演员的可能性为 %d%%' % (person.name, rate))

init()
print(
    '''
    =======================================================
    
                        LOL 演员识别器
            
            本程序采用作者自创的非科学算法,纯属娱乐!
            
    =======================================================
    '''
)
name = input('请输入玩家 ID :')
area = input('请输入玩家所在大区:')
isActor(name, area)
input()

识别算法是自己瞎编的。。。新手,感觉自己的代码有点乱。。

3598 次点击
所在节点    Python
11 条回复
yanchao7511461
2016-05-25 12:20:34 +08:00
识别模型很关键
lunaticus7
2016-05-25 12:39:34 +08:00
少侠是学 java 出身吧^_^
cjyang1128
2016-05-25 12:40:47 +08:00
哪过第三方 API
hard2reg
2016-05-25 13:04:22 +08:00
@cjyang1128 百度 “带玩游戏平台”。不能多说了,有推广嫌疑。。。
hard2reg
2016-05-25 13:04:31 +08:00
@lunaticus7 何以见得
gkiwi
2016-05-25 14:27:55 +08:00
青铜的怎么办!
hard2reg
2016-05-25 14:31:08 +08:00
@gkiwi 因为钻石以上的人少,所以会“比较准”。
changwei
2016-05-25 18:43:31 +08:00
腾讯 TGP 啊,某玩游戏盒子啊不知道他们是什么算法检测的
cjyang1128
2016-05-25 22:20:47 +08:00
alittletrain
2016-05-26 08:35:41 +08:00
@hard2reg 请教哪个平台的 api ?
hard2reg
2016-05-26 10:20:05 +08:00
@alittletrain 见 4L ,我已经说了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX