importer.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env python3
  2. from http.client import HTTPSConnection
  3. import json
  4. import operator
  5. from pprint import pprint
  6. import db
  7. def insert_kill(c, kill):
  8. db.execute(c, 'INSERT INTO kills (kill_id, solar_system_id, kill_time, moon_id) VALUES(?, ?, ?, ?)',
  9. kill['killID'], kill['solarSystemID'], kill['killTime'], kill['moonID'])
  10. victim = kill['victim']
  11. parambatch = [(
  12. kill['killID'], 1, victim['characterID'], victim['characterName'], victim['shipTypeID'],
  13. victim['allianceID'], victim['allianceName'], victim['corporationID'], victim['corporationName'], victim['factionID'], victim['factionName'],
  14. victim['damageTaken'], None, None, None,
  15. )]
  16. for attacker in kill['attackers']:
  17. parambatch.append((
  18. kill['killID'], 0, attacker['characterID'], attacker['characterName'], attacker['shipTypeID'],
  19. attacker['allianceID'], attacker['allianceName'], attacker['corporationID'], attacker['corporationName'], attacker['factionID'], attacker['factionName'],
  20. attacker['damageDone'], attacker['finalBlow'], attacker['securityStatus'], attacker['weaponTypeID'],
  21. ))
  22. c.executemany('''
  23. INSERT INTO characters (
  24. kill_id, victim, character_id, character_name, ship_type_id,
  25. alliance_id, alliance_name, corporation_id, corporation_name, faction_id, faction_name,
  26. damage, final_blow, security_status, weapon_type_id
  27. ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  28. ''', parambatch
  29. )
  30. parambatch = []
  31. for item in kill['items']:
  32. parambatch.append((kill['killID'], item['typeID'], item['flag'],
  33. item['qtyDropped'], item['qtyDestroyed'], item['singleton']))
  34. c.executemany('''
  35. INSERT INTO items (
  36. kill_id, type_id, flag, dropped, destroyed, singleton
  37. ) VALUES(?, ?, ?, ?, ?, ?)
  38. ''', parambatch
  39. )
  40. db.conn.commit()
  41. def main():
  42. conn = HTTPSConnection('zkillboard.com', timeout=10)
  43. with db.ykill_cursor() as c:
  44. groups = db.query(c, 'SELECT groupID FROM eve.invGroups WHERE categoryID = ?', 6)
  45. groups = list(map(operator.itemgetter('groupID'), groups))
  46. for i in range(0, len(groups), 10):
  47. query_groups = map(str, groups[i:i+10])
  48. conn.request('GET', '/api/groupID/{}/api-only'.format(','.join(query_groups)))
  49. response = conn.getresponse()
  50. if response.status != 200:
  51. raise Exception('got {} {} from zkb'.format(response.status, response.reason))
  52. kills = json.loads(response.read().decode('utf-8'))
  53. response.close()
  54. print('inserting', len(kills), 'kills')
  55. for kill in kills:
  56. insert_kill(c, kill)
  57. if __name__ == '__main__':
  58. main()