zaragoza-sedeelectronica / zaragoza-sedeelectronica.github.io

21 stars 5 forks source link

Ofrecer información estructurada de los precios #2

Closed virtor closed 9 years ago

virtor commented 9 years ago

El campo de precio se ofrece como información en texto libre, para poder trabajar con este campo sería necesario que se ofreciera la información 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 precios 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:

Otros sitios como la Google Places API no proporcionan este tipo de información.

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

Teniendo en cuenta los comentarios proporcionados anteriormente, la propuesta que puede considerarse como más adecuada es una pequeña variación sobre lo propuesto por @jrub.

"price": {
  "zaragoza-card": true,
  "fares": [
    { "@type": "gr:UnitPriceSpecification", "gr:hasCurrencyValue": "3"^^xsd:float, "gr:hasCurrency": "EUR", "fareGroup": "regular", "minSize": "1"},
    { "@type": "gr:UnitPriceSpecification", "gr:hasCurrencyValue": "5"^^xsd:float, "gr:hasCurrency": "EUR", "fareGroup": "group", "minSize": "10"}
    ....
    ]
}
txtbits commented 9 years ago

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

{
    "price": [
        {
            "hasCurrencyValue": 3,
            "hasCurrency": "EUR",
            "fareGroup": "regular",
            "minSize": "1"
        },
        {
            "hasCurrencyValue": 0,
            "hasCurrency": "EUR",
            "fareGroup": "zaragoza-card",
            "minSize": "1"
        },
        {
            "hasCurrencyValue": 5,
            "hasCurrency": "EUR",
            "fareGroup": "group",
            "minSize": "10"
        }
    ]
}
jrub commented 9 years ago

Así de primeras, respecto a los nombres de los parámetros, no sé si los hasCurrency y hasCurrencyValue suenan naturales en web semántica, pero para un API REST me suena mejor currency para el primero y amount, price, o fare para el segundo. También, minSize, no entendía al principio qué era relativo a grupos de personas... ¿igual algo más descriptivo como minPeople? ¿y en vez de fareGroup poner fareType?

ocorcho commented 9 years ago

Los de currency sí que son importantes puesto que son los que se usan también en schema.org, basado en GoodRelations, y lo usan en muchos sites de comercio electrónico. Los otros se pueden cambiar, sin problema, si resultan más intuitivos de esa manera.

txtbits commented 9 years ago

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

"price": [
    {
        "fareGroup": "string",
        "hasCurrencyValue": 0,
        "hasCurrency": "string",
        "minSize": "string"
    }
]

A través del vector price se pueden establecer múltiples precios haciendo diferentes combinaciones con el campo fareGroup que especifica el tipo/grupo de la entrada, pudiendo establecer también diferentes precios y número de personas necesario (la entrada individual tiene valor 1) para cada uno:

Nota: Los tipos/grupos pueden incrementarse en el futuro.

Ejemplo de actividad:

{
    "id": 000000,
    "title": "Título de la actividad",
    "price": [
        {
            "fareGroup": "Anticipada",
            "hasCurrencyValue": 8,
            "hasCurrency": "EUR",
            "minSize": "1"
        },
        {
            "fareGroup": "Normal",
            "hasCurrencyValue": 10,
            "hasCurrency": "EUR",
            "minSize": "1"
        },
        {
            "fareGroup": "Desempleados",
            "hasCurrencyValue": 6,
            "hasCurrency": "EUR",
            "minSize": "1"
        },
    ],
    ...
}

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