def poll_gb_for_updates(): database_updated_on = Games.query.order_by(Games.date_last_updated).first().date_last_updated time_of_last_query = database_updated_on last_processed_update = datetime.utcnow() # let's set up the request params = { 'api_key': 'fa81468e1a504b4354094d5642853afe1bfb2d5f', 'format': 'json', 'sort': 'date_last_updated:desc', 'offset': 0 } while last_processed_update > database_updated_on: # we can't make too many queries or GB isn't happy time_delta = time.time() - time_of_last_query if time_delta < 1: pass else: print() print("Time since last query: " + str(time_delta)) time_of_last_query = time.time() no_response = True while no_response: try: print("Making request...") r = requests.get('http://www.giantbomb.com/api/games/', timeout=6.05, headers=header, params=params) no_response = False except requests.exceptions.ReadTimeout: print("Request timed out. Let's try again.") continue print("Response received. Status Code: " + str(r.status_code)) results = r.json() total_games = results['number_of_total_results'] games = results["results"] for game in games: identifier = int(game['id']) name = game['name'] detail_url = game['site_detail_url'] date_added = convert_timestamp_to_datetime(game['date_added']) date_last_updated = convert_timestamp_to_datetime(game['date_last_updated']) deck = game['deck'] image_url = game['image']['medium_url'] create_games.find_or_create_game(identifier, name, detail_url, date_added, date_last_updated, deck, image_url) params["offset"] += 100 print("Committing to database...") db.session.commit() print("Update Successful!")
def dump_gb(): """Used to dump the entire GiantBomb database into the local application's.""" print("Regenerating Games Table") # drop Games table Games.query.delete() offset = 0 # TODO: pull api key from config file params = { 'api_key': 'fa81468e1a504b4354094d5642853afe1bfb2d5f', 'format': 'json', 'sort': 'id:asc', 'offset': offset } time_of_last_query = time.time() r = requests.get('http://www.giantbomb.com/api/games/', headers=header, params=params) results = r.json() total_games = results['number_of_total_results'] while offset <= total_games: time_delta = time.time() - time_of_last_query if time_delta < 1: pass else: print() print("Time since last query: " + str(time_delta)) time_of_last_query = time.time() no_response = True while no_response: try: print("Making request...") r = requests.get('http://www.giantbomb.com/api/games/', timeout=6.05, headers=header, params=params) no_response = False except requests.exceptions.ReadTimeout: print("Request timed out. Let's try again.") continue print("Response received. Status: " + str(r.status_code)) results = r.json() total_games = results['number_of_total_results'] games = results["results"] print("Adding games to database...") for game in games: identifier = int(game['id']) name = game['name'] detail_url = game['site_detail_url'] date_added = convert_timestamp_to_datetime(game['date_added']) date_last_updated = convert_timestamp_to_datetime(game['date_last_updated']) deck = game['deck'] image_url = get_image(game) create_games.find_or_create_game(identifier, name, detail_url, date_added, date_last_updated, deck, image_url) print("Adjusting Offset...") offset += 100 params["offset"] = offset print("Committing to database...") db.session.commit() print(str(offset) + " cached of " + str(total_games)) print("T-t-t-t-t-that's all folks!")