def top(): """ Hakee parametrien mukaan määritellyt pelaajat tilastoineen. Esim. 30 eniten maaleja tehnyttä kenttäpelaajaa, 15 maalivahtia torjuntaprosentin mukaan, jne. """ sort = request.args.get("sort", None) year = request.args.get("year", scraper.SEASON) try: goalies = bool(int(request.args.get("goalies", "0"))) reverse = bool(int(request.args.get("reverse", "1"))) playoffs = bool(int(request.args.get("playoffs", "0"))) limit = int(request.args.get("limit", "1000")) except ValueError: abort(400) # Bad Request allowed_sorts = scraper.GOALIE_STATS if goalies else scraper.PLAYER_STATS if sort and sort not in allowed_sorts: abort(400) # TODO pitäisikö palauttaa virheilmoitus? try: data = scraper.scrape_player_stats(year=year, playoffs=playoffs, goalies=goalies, reverse=reverse, order=sort) if data is None: abort(404) except Exception as e: logging.error(e) abort(404) if limit: data = data[:limit] # Jsonify ei salli listan palauttamista JSON-muodossa, käytetään # pythonin omaa JSON-moduulia: data = json.dumps(data) return Response(data, mimetype="application/json")
def get_players_and_teams(players=None, teams=None): """ Hakee valittujen pelaajien ja joukkueiden kauden tilastot sekä viimeisimmän ottelut tiedot. Jos pelaaja ei ole pelannut tällä kaudella yhtään ottelua, pelaajan osalta palautetaan vain tyhjiöarvo. """ players_dict, teams_dict = {}, {} if teams: standings = scraper.scrape_standings() assert isinstance(standings, dict) # TODO debug assert isinstance(teams[0], basestring) # TODO debug if not standings: abort(503) # Service unavailable if any(team not in standings for team in teams): abort(400) # Bad request - virheellinen joukkueen tunnus for team in teams: stats = standings[team] try: games = scraper.scrape_games_by_team(team) except: games = None teams_dict[team] = dict(stats=stats, games=games) if players: player_stats = scraper.scrape_player_stats() for pid in players: for pstat in player_stats: if pid == pstat["pid"]: try: games = scraper.scrape_games_by_player(pid) except: games = None stats, latest_game = None, None players_dict[pid] = dict(stats=pstat, games=games) break # Seurattavaa pelaajaa ei löytynyt kenttäpelaajista, # etsitään maalivahdeista: goalie_stats = scraper.scrape_player_stats(goalies=True) for pid in players: if pid in players_dict: continue # Pelaaja löytyi kenttäpelaajista for pstat in goalie_stats: if pid == pstat["pid"]: try: games = scraper.scrape_games_by_player(pid) except: games = None stats, latest_game = None, None players_dict[pid] = dict(stats=pstat, games=games) break # Jos pelaajaa ei löytynyt kenttäpelaajista eikä maalivahdeista, # ei pelaaja ole pelannut yhdessäkään ottelussa nykyisellä kaudella for pid in players: if not pid in players_dict: players_dict[pid] = dict(stats=None, games=None) return dict(players=players_dict, teams=teams_dict)