GithubHelp home page GithubHelp logo

bigomby / bibus-reservas-api Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 143 KB

API RESTful para la reserva de salas de la Biblioteca de la Universidad de Sevilla.

Home Page: https://bigomby.github.io/bibus-reservas-api/

TypeScript 98.72% Dockerfile 1.28%
bibus reserva-salas universidad-de-sevilla

bibus-reservas-api's People

Contributors

bigomby avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

bibus-reservas-api's Issues

Obtener el ID de reserva

El scraper tras realizar la reserva debe también obtener el ID de dicha reserva y devolverlo como
respuesta.

API entrypoint para consulta de salas

Crear controlador para atender las peticiones de consulta de salas: La respuesta debe tener el siguiente formato:

GET /salas

[
  {
    "id": "1",
    "turn": [
      {
        "id": "1",
        "time": "9:00 - 10:30",
        "available": true
      },{
        "id": "2",
        "time": "10:30 - 12:30",
        "available": true
      },{
        "id": "3",
        "time": "12:30 - 14:30",
        "available": true
      },{
        "id": "4",
        "time": "14:30 - 16:30",
        "available": true
      },{
        "id": "5",
        "time": "16:30 - 18:30",
        "available": true
      },{
        "id": "6",
        "time": "18:30 - 21:00",
        "available": true
      }
    ]
  },
  {
    "id": "7",
    "turns": [
      {
        "id": "1",
        "time": "9:00 - 11:00",
        "available": true
      },{
        "id": "2",
        "time": "11:00 - 13:00",
        "available": true
      },{
        "id": "3",
        "time": "13:00 - 15:00",
        "available": true
      },{
        "id": "4",
        "time": "15:00 - 17:00",
        "available": true
      },{
        "id": "5",
        "time": "17:00 - 19:00",
        "available": true
      },{
        "id": "6",
        "time": "19:00 - 21:00",
        "available": true
      }
    ]
  }
]

GET /salas/8

{
  "id": "8",
  "turns": [
    {
      "id": "1",
      "time": "9:00 - 11:00",
      "available": true
    },{
      "id": "2",
      "time": "11:00 - 13:00",
      "available": true
    },{
      "id": "3",
      "time": "13:00 - 15:00",
      "available": true
    },{
      "id": "4",
      "time": "15:00 - 17:00",
      "available": true
    },{
      "id": "5",
      "time": "17:00 - 19:00",
      "available": true
    },{
      "id": "6",
      "time": "19:00 - 21:00",
      "available": true
    }
  ]
}

Cancelar reserva

Añadir la posibilidad de cancelar una reserva dada una fecha.

Error calculando la sala/turno

Cuando hay salas en estado "Cerrada" el cálculo de la sala y el turno es erróneo. Probablemente se debe a que para encontrar en número de elementos en la tabla se usan sólo los que tienen un enlace y las salas cerradas no lo tienen.

La petición para la cancelación de salas no debería llevar body

Para cancelar una sala se envía una petición HTTP DELETE con el ID de reservan en el body lo cual no es lo idea, ya que, aunque la norma lo permite, algunas librerías no permiten enviar datos en el body cuando se realiza una petición DELETE.

Debe enviarse la ID de reserva como parte del path en la url.

Reservar sala

El scraper debe ser capaz de realizar una reserva de una sala. El procedimiento consiste en enviar un mensaje HTTP POST a la URL:

https://bibing.us.es/reserva_salas

El mensaje debe ser tipo application/x-www-form-urlencoded con los siguientes campos:

nombre: <nombre+separado+por+signos+más>
uvus: <uvus>
correo: <correo para la notificación>
sala: <numero de la sala>
turno: <numero del turno>
fecha: <DD-MM-AAAA>
btn_reservar: ""

Este mensaje debe llevar la Cookie PHPSESSID=<ticketID>. El ticketID se obtiene en el proceso de login.

Método de la API para reservar y cancelar salas

Debe existir una forma tanto de realizar reservas como de cancelarlas.

  • Cuando se realiza una reserva se sebe devolver el ID de la reserva en la respuesta y así poder cancelarse la reserva posteriormente.
  • La reserva no puede realizarse con más de dos días de antelación

Login en SSO

El scraper debe ser capaz de loguearse en el sistema de autenticación usado por la plataforma (SSO). La finalidad es obtener el ticketID que permite realizar peticiones autenticadas. El proceso es el siguiente:

  1. Realizar un HTTP POST a la URL
    https://sso.us.es/CAS/index.php/login?service=https%3A%2F%2Fbibing.us.es%2Freserva_salas%2FBIA
    
    En el body debe enviarse un formulario usando application/x-www-form-urlencoded con los siguiente campos:
    adAS_i18n_theme: 'es',
    adAS_mode: 'authn',
    adAS_username: <username>,
    adAS_password: <password>,
    
  2. Se recibirá como respuesta un mensaje de redirección 302 Found a la dirección:
    https://bibing.us.es/reserva_salas/?ticket=<ticketID>
    
    Se puede encontrar esta URL en el campo Location de la cabecera HTTP de la respuesta.
  3. Se realizará ahora un POST a esta dirección obtenida y como respuesta se recibirá otro mensaje 302 Found con el campo Location a la URL:
    https://bibing.us.es/reserva_salas/BIA
    
    En la cabecera de este mensaje HTTP se puede encontrar la Cookie PHPSESSID que es la que
    se debe usar para hacer peticiones que requieren autenticación.

NOTA: Es cierto que en paso ya se dispone del ticketID, sin embargo, es necesario enviar el mensaje POST del paso 3 para que el sistema autorice las peticiones.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.