MATERIAS
URLs
Principales
La pantalla principal tiene 3 formatos: auto, vertical y horizontal:
/h/<pabellon-es>- pantalla horizontal con las materias en los pabellones:
pabellon-es. /v/<pabellon-es>- pantalla vertical con las materias en los pabellones:
pabellon-es. /a/<pabellon-es>- pantalla con las materias en los pabellones:
pabellon-es, detección automática de cantidad de líneas en pantalla.
Estas URLs soportan automáticamente el paginado de la información (lista de materias), de modo que en los horarios con mayor ocupación, la pantalla va "rotando" la información mostrada en la pantalla sucesivamente de acuerdo a los siguientes parámetros:
El primero es la cantidad de materias mostrada por página y el segundo el tiempo para el cambio de página.
| vertical | horizontal | auto | |
|---|---|---|---|
| lineas (MAX_LINES) | 20 | 10 | auto |
| tiempo (WAIT_SECS) | 14s | 7s | 7s |
En el servidor se estima cuantas lineas ocupa cada materia y se particiona el contenido en no más de MAX_LINES por pantalla, si hay más de una pantalla, se espera WAIT_SECS antes de mostrar la siguiente. En el modo automático la cantidad de lineas a mostrar por pantalla es calculada de acuerdo a cuantas líneas entran en la misma.
En estas URLs pabellon-es representa uno o varios pabellones a elección del usuario, siendo 0, 1 y 2 los
válidos al momento. Ejemplos:
/h/0: página horizontal con las materias del día actual del pabellón 0./v/12: página vertical con las materias del día actual de los pabellones 1 y 2.
Nota: el primer request (cualquiera sea que use datos de las materias) recibido en el día actualiza la información desde el spreadsheet indicado sincrónicamente lo cual hace que demore más que los sucesivos requests. Una vez descargada la información desde dicho spreadsheet, dicha información será utilizada durante todo el día y no volverá a actualizarse desde la fuente de datos nuevamente (hasta el día siguiente). Se podría poner una url que fuerce la recarga de los datos "en el momento".
Las materias mostradas dependen de la hora de cada request. Se filtran todas las materias preservando aquellas que comienzan antes (ahora + 45min) y que terminan luego de (ahora-10min). De esta forma podemos ver las materias que están por terminar y por empezar además de aquellas que están en transcurso.
Extra
/- acceso a esta documentación.
/json- json con todas las actividades de la semana.
/json/<dia>- json con todas las actividades del día
dia. /json/<dia>/<pabellon>- json con todas las actividades del día
diaen el pabellónpabellon. /human- presenta al usuario links para que elija un pabellon o varios en particular.
/human/<pabellon-es>- presenta al usuario los días disponibles para que elija cuales quiere ver.
/human/<pabellon-es>/<dia>- muestra una versión primitiva de los datos de las materias correspondientes al/los pabellon/es correspondientes al día elegido.
Testing
/x/<pabellon-es>- pantalla vertical con las materias en los pabellones:
pabellon-escorrespondientes al díalunesa las14:00hs. /y/<pabellon-es>- pantalla horizontal con las materias en los pabellones:
pabellon-escorrespondientes al díalunesa las14:00hs. /z/<pabellon-es>- pantalla auto con las materias en los pabellones:
pabellon-escorrespondientes al díalunesa las14:00hs. /final/<day>/<pabellon-es>/<desde>- versión de
/v..y/h..que recibe parámetros internos para definirMAX_LINESyWAIT_SECSy deja al usuario especificar la hora.
Instalación
Requisitos: Python 3.6 o superior
- Crear un entorno de Python:
python -m venv env - Entrar al entorno:
. ./env/bin/activate(en Windows:env\scripts\activate) - Instalar dependencias:
pip install -r requirements.txt
Ejecutar en entorno de desarrollo
- (Entrar al entorno de Python como en el punto 2 anterior)
- Configurar la aplicación Flask:
export FLASK_APP=server(en Windows:set FLASK_APP=server) - Ejecutar Flask:
flask run
Ejecutar en entorno de producción
- (Entrar al entorno de Python como en el punto 2 anterior)
pip install waitress(deberías poder usar la versión más reciente, no obstante, he usado exitosamente la3.0.2)waitress-serve --port=3001 --call server:get_app
Configuración
- Configurar la hoja de cálculo a ser accedida en el archivo
server.py, línea 21, en la variable llamadaSPREADSHEET, así:
SPREADSHEET = "1pjtykzqGhaTkVfTNK7RsHHuu_u67hiA3jEsn0uMPLFY" - Configurar la clave de usuario para acceder a las hojas de cálculo de Google: guardar las credenciales del usuario de Google en un archivo llamado
sacc-aulas-sa-private-key.jsonen el mismo lugar donde se encuentraserver.py. El archivo tendrá este formato:
{
"type": "service_account",
"project_id": "<some-project>",
"private_key_id": "<40-chars hexa id>",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQ... MULTILINE PRIVATE KEY=\n-----END PRIVATE KEY-----\n",
"client_email": "<some-username>@<project_id>.iam.gserviceaccount.com",
"client_id": "<21 digits decimal-integer number>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<user email>%40<pre>.iamd.gserviceaccount.com",
"universe_domain": "googleapis.com"
}