summaryrefslogtreecommitdiffstats
path: root/importer.py
blob: 44c95dc131f24e452996a72506855886979c4429 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3

from http.client import HTTPSConnection
import json
import operator
from pprint import pprint

import db

def insert_kill(c, kill):
    db.execute(c, 'INSERT INTO kills (kill_id, solar_system_id, kill_time, moon_id) VALUES(?, ?, ?, ?)',
                    kill['killID'], kill['solarSystemID'], kill['killTime'], kill['moonID'])

    victim = kill['victim']
    parambatch = [(
            kill['killID'], 1, victim['characterID'], victim['characterName'], victim['shipTypeID'],
            victim['allianceID'], victim['allianceName'], victim['corporationID'], victim['corporationName'], victim['factionID'], victim['factionName'],
            victim['damageTaken'], None, None, None,
    )]
    for attacker in kill['attackers']:
            parambatch.append((
                    kill['killID'], 0, attacker['characterID'], attacker['characterName'], attacker['shipTypeID'],
                    attacker['allianceID'], attacker['allianceName'], attacker['corporationID'], attacker['corporationName'], attacker['factionID'], attacker['factionName'],
                    attacker['damageDone'], attacker['finalBlow'], attacker['securityStatus'], attacker['weaponTypeID'],
            ))
    c.executemany('''
            INSERT INTO characters (
                    kill_id, victim, character_id, character_name, ship_type_id,
                    alliance_id, alliance_name, corporation_id, corporation_name, faction_id, faction_name,
                    damage, final_blow, security_status, weapon_type_id
            ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            ''', parambatch
    )

    parambatch = []
    for item in kill['items']:
            parambatch.append((kill['killID'], item['typeID'], item['flag'],
                    item['qtyDropped'], item['qtyDestroyed'], item['singleton']))
    c.executemany('''
            INSERT INTO items (
                    kill_id, type_id, flag, dropped, destroyed, singleton
            ) VALUES(?, ?, ?, ?, ?, ?)
            ''', parambatch
    )

    db.conn.commit()

def main():
    conn = HTTPSConnection('zkillboard.com', timeout=10)
    with db.ykill_cursor() as c:
        groups = db.query(c, 'SELECT groupID FROM eve.invGroups WHERE categoryID = ?', 6)
        groups = list(map(operator.itemgetter('groupID'), groups))
        for i in range(0, len(groups), 10):
            query_groups = map(str, groups[i:i+10])
            conn.request('GET', '/api/groupID/{}/api-only'.format(','.join(query_groups)))
            response = conn.getresponse()
            if response.status != 200:
                raise Exception('got {} {} from zkb'.format(response.status, response.reason))
            kills = json.loads(response.read().decode('utf-8'))
            response.close()
            print('inserting', len(kills), 'kills')
            for kill in kills:
                insert_kill(c, kill)

if __name__ == '__main__':
    main()