import argparse import json import re import sys import time from salvager import esi from salvager import zkill SYSTEM_AND_DATE = re.compile(r"/(\d+)/(\d+)/?$") def expand_hashes(snapshot): """ Expands killmails in *snapshot* IN PLACE by adding their hash based on information from Zkillboard. """ for killmail in snapshot['killmails']: time.sleep(1.05) # Zkillboard is very sensitive. killmail['hash'] = zkill.hash(killmail['killmail_id']) return snapshot def expand_details(snapshot): """ Expands killmails in *snapshot* IN PLACE by adding details from EVE ESI. Some data is dropped in process as e.g., full information on attackers is not important in context of the visualizations. """ for killmail in snapshot['killmails']: details = esi.killmail(killmail['killmail_id'], killmail['hash']) killmail.update(details) return snapshot def get_ships(snapshot): ships = {x['victim']['ship_type_id'] for x in snapshot['killmails']} return [esi.type(x) for x in ships] def output_name(args): """ Generates name of the output file based on the CLI *args*. """ if args.output: return args.output match = SYSTEM_AND_DATE.search(args.url) if match: return "{}_{}.json".format(*match.groups()) return "a.json" def main(): parser = argparse.ArgumentParser() parser.add_argument("url") parser.add_argument("-o", "--output") parser.add_argument("--pretty", action='store_true') args = parser.parse_args() snapshot = zkill.parse_battle_report(args.url) expand_hashes(snapshot) expand_details(snapshot) snapshot['ships'] = get_ships(snapshot) filename = output_name(args) with open(filename, 'w') as fd: opts = {'indent': 4} if args.pretty else {} fd.write(json.dumps(snapshot, **opts)) fd.write("\n") if __name__ == "__main__": main()