proflie meta and games
This commit is contained in:
parent
6c41cda563
commit
9c5a5a41ca
|
|
@ -7,7 +7,7 @@ BEGIN;
|
|||
leetifyUserId TEXT,
|
||||
ctLeetifyRating NUMERIC,
|
||||
ctLeetifyRatingRounds NUMERIC,
|
||||
dataSource NUMERIC,
|
||||
dataSource TEXT,
|
||||
elo NUMERIC,
|
||||
gameFinishedAt TIMESTAMP,
|
||||
gameId TEXT,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
BEGIN;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS data.profile_meta (
|
||||
name TEXT,
|
||||
steam64Id TEXT,
|
||||
isCollector BOOL,
|
||||
isLeetifyStaff BOOL,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
BEGIN;
|
||||
|
||||
SELECT steam64Id, isCollector, isLeetifyStaff,
|
||||
SELECT name, steam64Id, isCollector, isLeetifyStaff,
|
||||
isProPlan, leetifyUserId, faceitNickname
|
||||
FROM data.profile_meta
|
||||
WHERE FALSE;
|
||||
|
|
|
|||
119
src/extract.py
119
src/extract.py
|
|
@ -1,5 +1,12 @@
|
|||
import psycopg2 as pg
|
||||
from .leetify import Leetify
|
||||
from os import environ as env
|
||||
from .transform import (
|
||||
meta_from_profile,
|
||||
games_from_profile,
|
||||
player_stats_from_game,
|
||||
)
|
||||
import psycopg2 as pg
|
||||
from typing import Tuple
|
||||
|
||||
|
||||
def connect():
|
||||
|
|
@ -10,3 +17,113 @@ def connect():
|
|||
host=env.get("POSTGRES_HOST"),
|
||||
port=env.get("POSTGRES_PORT"),
|
||||
)
|
||||
|
||||
|
||||
def vals_in_order(data: dict, keys: list):
|
||||
vals = [data[key] for key in keys]
|
||||
return vals
|
||||
|
||||
|
||||
def dict_to_col_val(data: dict) -> Tuple[list, list]:
|
||||
cols = []
|
||||
vals = []
|
||||
for k, v in data.items():
|
||||
cols.append(k)
|
||||
vals.append(v)
|
||||
|
||||
return cols, vals
|
||||
|
||||
|
||||
def dict_to_sql_str(data: dict) -> Tuple[str, str]:
|
||||
cols, vals = dict_to_col_val(data)
|
||||
vals = map(str, vals)
|
||||
|
||||
cols = ", ".join(cols)
|
||||
vals = ", ".join(vals)
|
||||
|
||||
return cols, vals
|
||||
|
||||
|
||||
def extract_profile_meta(id, api=Leetify(), conn=None):
|
||||
if not conn:
|
||||
conn = connect()
|
||||
|
||||
cols = [
|
||||
"name",
|
||||
"steam64Id",
|
||||
"isCollector",
|
||||
"isLeetifyStaff",
|
||||
"isProPlan",
|
||||
"leetifyUserId",
|
||||
"faceitNickname",
|
||||
]
|
||||
profile = api.get_profile(id)
|
||||
meta = meta_from_profile(profile)
|
||||
vals = vals_in_order(meta, cols)
|
||||
|
||||
with conn.cursor() as curs:
|
||||
sql = f"""
|
||||
INSERT INTO data.profile_meta ({', '.join(cols)})
|
||||
VALUES ({', '.join(['%s'] * len(vals))});
|
||||
"""
|
||||
curs.execute(sql, vals)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def extract_profile_games(profile, conn=None):
|
||||
if not conn:
|
||||
conn = connect()
|
||||
|
||||
cols = [
|
||||
"leetifyUserId",
|
||||
"ctLeetifyRating",
|
||||
"ctLeetifyRatingRounds",
|
||||
"dataSource",
|
||||
"elo",
|
||||
"gameFinishedAt",
|
||||
"gameId",
|
||||
"isCs2",
|
||||
"mapName",
|
||||
"matchResult",
|
||||
"scores",
|
||||
"skillLevel",
|
||||
"tLeetifyRating",
|
||||
"tLeetifyRatingRounds",
|
||||
"deaths",
|
||||
"hasBannedPlayer",
|
||||
"kills",
|
||||
"partySize",
|
||||
]
|
||||
|
||||
games = games_from_profile(profile)
|
||||
games = map(lambda game: vals_in_order(game, cols), games)
|
||||
|
||||
with conn.cursor() as curs:
|
||||
curs.executemany(
|
||||
f"""
|
||||
INSERT into data.profile_game ({', '.join(cols)})
|
||||
VALUES ({', '.join(['%s'] * len(cols))});
|
||||
""",
|
||||
games,
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def extract_player_stats(game, conn=None):
|
||||
if not conn:
|
||||
conn = connect()
|
||||
stats = player_stats_from_game(game)
|
||||
|
||||
games = map(dict_to_sql_str, stats)
|
||||
|
||||
with conn.cursor() as curs:
|
||||
for (
|
||||
cols,
|
||||
vals,
|
||||
) in games:
|
||||
curs.execute(
|
||||
"""INSERT INTO data.player_stats (%s)
|
||||
VALUES (%s);""",
|
||||
(cols, vals),
|
||||
)
|
||||
conn.commit()
|
||||
|
|
|
|||
Loading…
Reference in New Issue