def get_match(session, match_id):
    """Get match metadata."""
    url = '{}{}/{}'.format(session.auth.base_url, MATCH_URL, match_id)
    parsed = make_scrape_request(session, url)
    game = parsed.find('h3').text
    if game != GAME_AOC:
        raise ValueError('not an aoc match')
    date_played = parsed.find(text=MATCH_DATE_PLAYED).find_next('td').text
    players = []
    colors = {}
    player_count = int(parsed.find('td', text='Players:').find_next('td').text)
    for div in parsed.find_all('div', style=True):
        if not div['style'].startswith('background-color:'):
            continue
        if len(players) == player_count:
            break
        username_elem = div.find_next('a', href=re.compile(PROFILE_PATH))
        username = username_elem.text
        color = div['style'].split(':')[1].split(';')[0].strip()
        colors[username] = color

        rec = None
        for dl_elem in parsed.find_all('a', href=re.compile('^/files/view')):
            rec_name = dl_elem.find('b', text=re.compile(username+'$'))
            if rec_name:
                rec = rec_name.parent

        user = parsed.find('a', text=username)
        if not user:
            # bugged match page
            continue
        user_id = int(user['href'].split('/')[-1])
        children = list(user.find_next('span').children)
        rate_after = None
        rate_before = None
        if str(children[0]).strip() == MATCH_NEW_RATE:
            rate_after = int(children[1].text)
            rate_before = rate_after - int(children[3].text)
        elif str(children[4]).strip() == MATCH_NEW_RATE:
            rate_after = int(children[5].text)
            rate_before = rate_after - int(children[3].text)
        players.append({
            'url': rec['href'] if rec else None,
            'id': user_id,
            'username': username,
            'color_id': COLOR_MAPPING.get(colors[username]),
            'rate_before': rate_before,
            'rate_after': rate_after
        })
    return {
        'timestamp': dateparser.parse(date_played),
        'players': players
    }
def get_match ( session , match_id ) : url = '{}{}/{}' . format ( session . auth . base_url , MATCH_URL , match_id ) parsed = make_scrape_request ( session , url ) game = parsed . find ( 'h3' ) . text if game != GAME_AOC : raise ValueError ( 'not an aoc match' ) date_played = parsed . find ( text = MATCH_DATE_PLAYED ) . find_next ( 'td' ) . text players = [ ] colors = { } player_count = int ( parsed . find ( 'td' , text = 'Players:' ) . find_next ( 'td' ) . text ) for div in parsed . find_all ( 'div' , style = True ) : if not div [ 'style' ] . startswith ( 'background-color:' ) : continue if len ( players ) == player_count : break username_elem = div . find_next ( 'a' , href = re . compile ( PROFILE_PATH ) ) username = username_elem . text color = div [ 'style' ] . split ( ':' ) [ 1 ] . split ( ';' ) [ 0 ] . strip ( ) colors [ username ] = color rec = None for dl_elem in parsed . find_all ( 'a' , href = re . compile ( '^/files/view' ) ) : rec_name = dl_elem . find ( 'b' , text = re . compile ( username + '$' ) ) if rec_name : rec = rec_name . parent user = parsed . find ( 'a' , text = username ) if not user : continue user_id = int ( user [ 'href' ] . split ( '/' ) [ - 1 ] ) children = list ( user . find_next ( 'span' ) . children ) rate_after = None rate_before = None if str ( children [ 0 ] ) . strip ( ) == MATCH_NEW_RATE : rate_after = int ( children [ 1 ] . text ) rate_before = rate_after - int ( children [ 3 ] . text ) elif str ( children [ 4 ] ) . strip ( ) == MATCH_NEW_RATE : rate_after = int ( children [ 5 ] . text ) rate_before = rate_after - int ( children [ 3 ] . text ) players . append ( { 'url' : rec [ 'href' ] if rec else None , 'id' : user_id , 'username' : username , 'color_id' : COLOR_MAPPING . get ( colors [ username ] ) , 'rate_before' : rate_before , 'rate_after' : rate_after } ) return { 'timestamp' : dateparser . parse ( date_played ) , 'players' : players }
Get match metadata.