#!/usr/bin/env python import cProfile from itertools import combinations from datetime import datetime from collections import defaultdict from BoardGameGeek import BoardGameGeek num_games = 500 bgg = BoardGameGeek() top_100 = bgg.top_100(limit=num_games) #print "Loading Ratings" def load_ratings(): users = defaultdict(list) ratings = bgg.all_ratings() for bgg_id, bgg_user, rating in ratings.yield_per(100): users[bgg_user].append((bgg_id, rating)) return users users = load_ratings() #print "" #print "Parsing User Votes" def parse_votes(users): votes = defaultdict(dict) for user, ratings in users.iteritems(): c_rating = 11 c_rank = 0 for (game, rating) in sorted(ratings, key=lambda x: x[1], reverse=True): if rating < c_rating:
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout) from docopt import docopt import cProfile from itertools import combinations from datetime import datetime from collections import defaultdict from BoardGameGeek import BoardGameGeek args = docopt(__doc__, version='Board Game Geek Recommender v1.0') num_games = 500 bgg = BoardGameGeek() def print_game(res): print u"{} ({}) (#{}) (w: {:>3.1f})".format( res['name'], res['yearpublished'], res['rank'], res['weight']), print u"| {:2.2f} ({:2.2f}) ({})".format( res['weighted_rating'], res['rating'], res['ratings']) print u"Artists: {}".format(", ".join([x['name'] for x in res['artists']])) print u"Categories: {}".format(", ".join([x['name'] for x in res['categories']])) print u"Designers: {}".format(", ".join([x['name'] for x in res['designers']])) print u"Mechanisms: {}".format(", ".join([x['name'] for x in res['mechanisms']])) print u"Publishers: {}".format(", ".join([x['name'] for x in res['publishers']])) for i, ans in sorted(res['players_poll'].items()):
game['rank'], perc, (six['best'] + six['recommended']) / float(six['total']), game['weight'], game['maxplaytime'], game['yearpublished'], stars, game['name'], "https://boardgamegeek.com/boardgame/{}".format(game['bgg_id'])) else: print u"{:>3} | {:>3.1f} | {} min | {} | {}[{}]({})".format( game['rank'], game['weight'], game['maxplaytime'], game['yearpublished'], stars, game['name'], "https://boardgamegeek.com/boardgame/{}".format(game['bgg_id'])) if __name__ == '__main__': args = docopt(__doc__, version='Board Game Geek Stats v1.0') bgg = BoardGameGeek() if args['--top']: limit = int(args['--top']) min_weight = 0 if args['--min-weight']: min_weight = float(args['--min-weight']) max_weight = 5 if args['--max-weight']: max_weight = float(args['--max-weight']) num_players = None if args['--n']: num_players = int(args['--n'])