zaragoza-sedeelectronica / zaragoza-sedeelectronica.github.io

21 stars 5 forks source link

Ofrecer información estructurada de los horarios #1

Closed virtor closed 9 years ago

virtor commented 9 years ago

Actualmente en el campo horario se permite la introducción de texto libre, para que se pueda reutilizar sería necesario que la información estuviera más estructurada.

ocorcho commented 9 years ago

Análisis sobre algunas alternativas posibles

Es importante tener en cuenta que no existe un estándar concreto para la especificación de horarios de apertura de lugares (comercios, equipamientos, etc.), por lo que la solución que se tome en este momento podría modificarse en el futuro si termina de surgir un estándar en este sentido. Algunas de las propuestas que se han hecho hasta el momento son las siguientes:

También se puede considerar la propuesta, sencilla, de @jrub en su feedback sobre el uso de la API de Zaragoza (https://gist.github.com/jrub/8707031fb834d80a7828).

ocorcho commented 9 years ago

Propuesta que se puede considerar para la descripción de horarios, basada en el comentario anterior.

"openingHours": {
   "periods": [
     {"open": {"day": "Monday", "time": "09:00"}, 
      "close": {"day": "Monday", "time": "15:00"}},
     {"open": {"day": "Monday", "time": "17:00"}, 
      "close": {"day": "Monday", "time": "21:00"}},
     {"open": {"day": "Tuesday", "time": "10:00"}, 
      "close": {"day": "Tuesday", "time": "21:00"}},
      ...
}
txtbits commented 9 years ago

Teniendo en cuenta las diferentes propuestas y aportaciones hemos pensando en optar por la siguiente descripción de horarios:

{
    "openingHours": {
        "periods": [
            {
                "day": "Monday",
                "open": "09:00",
                "close": "15:00"
            },
            {
                "day": "Monday",
                "open": "17:00",
                "close": "19:00"
            },
            {
                "day": "Tuesday",
                "open": "10:00",
                "close": "21:00"
            }
        ]
    }
}
jrub commented 9 years ago

¿Esto dónde iría, dentro de cada lugarque devuelve el API?

También me surge la duda de la zona horaria. Durante el Hackaton ZgzAppStore nos pasó que el API devolvía un GMT y nosotros la considerábamos GMT+1.

francho commented 9 years ago

Yo pondría las horas en formato extendido indicando la zona horaria.

También se podría hacer en formato UTC y que luego cada cual se lo comparta a su zona horaria

ocorcho commented 9 years ago

Dentro de cada evento. Incluir la zona horaria es buena idea, aunque curiosamente schema.org o APIs como las de foursquare, google places, no lo especifican.

jrub commented 9 years ago

Supongo que no lo ponen porque pondrán UTC y luego cada cual adapta al usarla, creo que es buena opción. Poner las horas en formato extendido como dice @francho también me parece mejor, el formato "18:00" casí parece algo para mostrar por pantalla, más que para consumir de un API.

jrub commented 9 years ago

Lo he estado pensando, y siendo que todo lo que ofrece el API es relativo siempre a la misma zona horaria, igual no hay que complicarlo más y dejarlo en el formato propuesto por @txtbits. Eso sí, actualmente algunas APIs devolvían GMT y otras GMT+1, si no recuerdo mal del Hackaton. Ese tipo de cosas, junto con la gestión del cambio a horario de verano (GMT+2) tiene que estar bien montado en el servidor. Si eso rula bien, creo que sería suficiente, ¿no?

virtor commented 9 years ago

La hora en GMT+1 se utiliza en los conjuntos de datos disponibles vía SOLR, porque es su forma de trabajar internamente con las fechas.

Es un tema que hemos tenido que explicar a diferentes personas por lo que creemos que es más fácil mostrar la hora local como indican en Google Places en opening_hours -> periods, aunque sea más formal como propone @francho

txtbits commented 9 years ago

La información referente a los horarios queda de la siguiente manera:

"subEvent": [
  {
    "horario": "string",
    "comentarios": "string",
    "horaInicio": "string",
    "horaFinal": "string",
    "openingHours": [
      {
        "dia": "string",
        "horaApertura": "string",
        "horaCierre": "string"
      }
    ]
  }
],

A través del vector OpeningHours se pueden establecer múltiples horarios de apertura/cierre haciendo diferentes combinaciones con el campo día:

Ejemplo de actividad:

{
    "id": 000000,
    "title": "Título de la actividad",
    "subEvent": [
        {
            "lugar": {
                ...
            },
            "horario": "Lunes de 9 a 10. Miércoles de 11 a 12. Viernes de 13 a 14h",
            "fechaInicio": "2015-10-02T00:00:00Z",
            "fechaFinal": "2015-10-23T00:00:00Z",
            "openingHours": [
                {
                    "dia": "Lunes",
                    "horaApertura": "09:00",
                    "horaCierre": "10:00"
                },
                {
                    "dia": "Miércoles",
                    "horaApertura": "11:00",
                    "horaCierre": "12:00"
                },
                {
                    "dia": "Viernes",
                    "horaApertura": "13:00",
                    "horaCierre": "14:00"
                }
            ]
        }
    ],
    ...
}

Se mantienen los campos horario y comentarios a nivel de subEvent permitiendo la introducción de texto libre para aquellas actividades en las que exista algún dato especial referente al horario y para aquellas actividades en las que no se pueda establecer un horario estructurado.