示例#1
0
 def __init__(self, api_url=PATH["api"], db_path=PATH["db"]):
     self.api = BoardGameGeekApi(url=api_url)
     self.db = BoardGameGeekDb(path=db_path)
示例#2
0
class BoardGameGeek:
    def __init__(self, api_url=PATH["api"], db_path=PATH["db"]):
        self.api = BoardGameGeekApi(url=api_url)
        self.db = BoardGameGeekDb(path=db_path)

    def get_collection(self, username, refresh=False, include_xpac=False):
        return BoardGameGeekCollection(self.api, self.db, username, refresh, include_xpac)

    def get_game(self, bgg_id):
        return BoardGameGeekGame(self.api, self.db, bgg_id)

    def top_100(self, limit=100, include_xpac=True):
        top100 = self.db.games(limit=limit)
        if not top100 or len(top100) != limit:
            top100 = self.api.top_100(limit=limit)

            games = []
            for i, bgg_id in enumerate(top100):
                if isinstance(bgg_id, int):
                    if not self.db.has_game(bgg_id):
                        sys.stderr.write("Fetching Game {} of {}\n".format(i + 1, len(top100)))

                game = BoardGameGeekGame(self.api, self.db, bgg_id)
                game.data["user_rating"] = "N/A"
                if include_xpac or game["gametype"] == "boardgame":
                    games.append(game)
            return games
        else:
            return top100

    def all_ratings(self):
        return self.db.all_ratings()

    def ratings(self, bgg_id):
        if not self.db.has_ratings(bgg_id):
            results = self.api.ratings(bgg_id)
            self.db.ratings_add(bgg_id, results)
            return results
        return self.db.ratings(bgg_id)

    def search(self, query, retall=False):
        res = self.db.game_by_name(query)
        if res:
            return self.db.games_extended_info([res])[0]
        else:
            results = self.api.search(query=query)

            exact = [x for x in results if x["name"] == query]

            games = []
            if not retall and len(exact) == 1:
                games.append(BoardGameGeekGame(self.api, self.db, exact[0]["bgg_id"]))
                return self.db.games_extended_info(games)[0]

            for i, g in enumerate(results):
                game = BoardGameGeekGame(self.api, self.db, g["bgg_id"])
                games.append(game)
            return self.db.games_extended_info(games)