Exemple #1
0
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!")
Exemple #2
0
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!")