def insert_chars_from_guild(realm, guild_name, chars_to_scan): data = load_json_from_url(GUILD_API_URL.format(region=realm.region, realm=realm.name, guild_name=guild_name)) # sometimes api returns error for a valid guild name try: members = data["members"] except KeyError: logging.exception("No data return for guild name: %s, realm: %s" % (guild_name, realm.name)) return for member in members: name = member["character"]["name"] # sometimes there is a character without realm. Possibly because it was deleted/transferred/renamed recently realm_name = member["character"].get("realm") if realm_name is None: continue realm = get_realm(realm.region, realm.name) char = Character() char.name = name char.realm = realm char.retrieve_guild = False if not session.query(Character).filter(Character.name == char.name, Character.realm == char.realm).first() and char not in session: session.add(char) chars_to_scan.append(char) session.commit()
def insert_chars_from_auc(realm): """ Insert all player characters represented in auction house into database note: realm names in auction house dump are always localised, with spaces removed """ auc_data = load_auction_data(realm) region = realm.region unique_auc_chars = set((lot["owner"], lot["ownerRealm"]) for lot in auc_data["auctions"]["auctions"]) print("Unique chars currently on %s auction house: %d" % (realm.name, len(unique_auc_chars))) for name, realm_name_localised in unique_auc_chars: realm = get_realm(region, realm_name_localised) char = Character() char.name = name char.realm = realm char.retrieve_guild = True if not session.query(Character).filter(Character.name == char.name, Character.realm == char.realm).first(): session.add(char) session.commit()