import http.server from oauthlib.oauth2 import WebApplicationClient import webbrowser import re import subprocess import ast import json import csv from datetime import datetime token_file = open(".oauthtoken", "r") oauth_token = token_file.readline() def json_print(dict_in): print(json.dumps(dict_in, indent=2)) def oauth_api_curl(url): command = ["curl", "-sH", "Authorization: Bearer {}".format( oauth_token), url] result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) if result.returncode == 0: return result.stdout else: error = result.stderr print("Error:") return error account_str = oauth_api_curl("https://us.api.blizzard.com/profile/user/wow?namespace=profile-us&locale=en_US") account_eval = ast.literal_eval(account_str) if type(account_eval) == dict: characters = account_eval['wow_accounts'][0]['characters'] char_dicts = [] for char in characters: char_dict = { 'id': char['id'], 'name': char['name'], 'level': char['level'], 'faction': char['faction']['name'], 'race': char['playable_race']['name'], 'class': char['playable_class']['name'], 'realm': char['realm']['name'], } char_dicts.append(char_dict) char_keys = char_dicts[0].keys() with open('./output/toons-{}.csv'.format(datetime.now().strftime("%Y%m%d-%H%M%S")), 'w', newline='') as output_file: dict_writer = csv.DictWriter(output_file, char_keys) dict_writer.writeheader() dict_writer.writerows(char_dicts) prot_char_url = char['protected_character']['href'] prot_char_str = oauth_api_curl(prot_char_url) prot_char_eval = ast.literal_eval(prot_char_str) if type(prot_char_eval) == dict: print(prot_char_eval['protected_stats'].keys()) else: print('eval\'d type:', type(prot_char_eval)) profs_url = "https://us.api.blizzard.com/profile/wow/character/{}/{}/professions?namespace=profile-us&locale=en_US".format( char['realm']['slug'], char['name'].lower()) profs_str = oauth_api_curl(profs_url) profs_eval = ast.literal_eval(profs_str) if type(profs_eval) == dict: json_print(profs_eval) else: print('eval\'d type:', type(profs_eval)) else: print('eval\'d type:', type(account_eval))