Exemplo n.º 1
0
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")
Exemplo n.º 2
0
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")
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)