Actualmente no funciona el código, dado que han cambiado endpoints de la Api (ya no existe acceso web, solo en app)
Se puede seguir la discusión en la pestaña 'issues' #7
Acepto y reviso pull requests sin problema, para mantener el repositorio actualizado, pero por problemas de tiempo actuales iré investigando en ratos libres
Web scraper del API de LaLiga Fantasy Oficial (Relevo). Descarga la información existente en la Liga Fantasy Oficial sobre los equipos y jugadores de la temporada y sus historiales de valor de mercado. Se ha implementado multithreading (tiempo de ejecución de ~25 segundos para 1595 jugadores) y comandos varios para poder modificar la ejecución sin cambiar nada del código en caso de modificaciones o aumento de jugadores en API. También se pueden obtener los datos y jugadores de tu propia liga y plantilla.
- Requisitos
- Ejecucion
- Ejecucion de personal_lineup.py (obtener Bearer Header)
- Importado como libreria
- Funcionamiento
- Referencias
- Implementaciones pendientes
- Sugerencias y Errores
- Python v3+
- Librería requests en python
- Librería numpy en python
- Descarga la última versión funcional y probada + el requirements.txt desde releases/latest
- Para instalar el paquete requests y numpy (para los NaN), podemos hacerlo con
pip install -r requirements.txt
- El programa se puede ejecutar con alguno de los siguientes comandos (dependiendo de tu instalación de python):
python fantasy_scraper.py
python3 fantasy_scraper.py
py fantasy_scraper.py
- Con los ajustes establecidos por defecto y se ejecutará mostrando por pantalla un progressBar de 0% a 100%. Ejemplo de ejecución para 1595 jugadores en API por defecto (~25 segundos):
- Acepta algunos comandos al ejecutarlo, para más información
fantasy_scraper.py --help
Para poder entrar en la API de nuestra liga/cuenta, necesitaremos un header que caduca cada 24hr. Se puede obtener fácilmente añadiento la siguiente página a marcadores e iniciando sesión en la propia página y luego pulsando en el marcador, lo que nos copiará en el portapapeles el token a pegar en terminal para poder acceder a las API de nuestra liga. Crear un nuevo marcador en la barra de marcadores, del nombre que sea y en URL introducimos:
javascript: (function() {var text = JSON.parse(localStorage.getItem("auth")).status.authenticate.access_token;navigator.clipboard.writeText(text).then(function() {alert('Token copiado correctamente al portapapeles!');}, function(err) {alert('No se ha podido copiar el token: ', err);});})()
- También se puede pulsar Ctrl + Shift + J en Chrome para abrir la consola web (DevTools) e introducir:
JSON.parse(localStorage.getItem("auth")).status.authenticate.access_token
Que nos devolverá el mismo token para pegarlo en terminal cuando se pida
Se puede importar y usar como librería dentro de otro script:
- El fantasy_scraper.py deberá encontrarse en la misma ruta que el script donde se quiere importar
- Se seguirá creando un archivo log.txt en la misma ubicación que se encuentra el script
- Para actualizar los .JSON sólo se necesitan las siguientes líneas en el script desde el que se importa:
import fantasy_scraper
...
def main():
...
fantasy_scraper.main(True, fantasy_scraper.TOTAL_JUGADORES)
...
...
- Se creará un log.txt que registrará cada operación del programa para solución de errores
- Se almacena el .json de cada jugador en
players/IDEQUIPO_NOMBRECORTO/IDJUGADOR_NOMBRECORTO.json
- Se crea un .json separado por cada equipo con sus jugadores y que guarda lo mismo que el jugadores pero sin estadisticas detalladas (minutos jugados,...), sólo con los puntos de cada jornada en
data/IDEQUIPO_NOMBRECORTO.json
- En el .json de cada jugador, en la sección de
marketValue
se almacena el historial de precios de mercado (por fecha) obtenido por el api endpoint de market-values. Ejemplo demarketValue
en un .JSONplayers/IDEQUIPO_NOMBRECORTO/IDJUGADOR_NOMBRECORTO.json
:
{
...
"marketValue": {
"14/07/2022": 25000000,
"15/07/2022": 25032031,
"16/07/2022": 24942978,
"17/07/2022": 24668708,
"18/07/2022": 24648333,
"19/07/2022": 24760373,
...
},
...
}
Este es un proyecto basado en el de @diegoparrilla, de donde he sacado el API endpoint y parte de la estructura de los JSON.
Se pueden consultar en issues -> labels -> mejora