API de Adrianistán
Con unos días de diferencia respecto a la publicación del nuevo blog, ha llegado una característica muy interesante, la API del blog.
Se trata de una API semántica, usando el lenguaje de consulta SPARQL, el cual es una recomendación de W3C. La API solo permite hacer consultas. Aunque teóricamente en SPARQL también se pueden modificar datos, no está activado por motivos evidentes. La API es de acceso público y cualquiera puede usarla, además al ser SPARQL podéis combinar las consultas con bases de datos de otros servidores. La API expone una ontología basada en Schema.org. En esa página encontraréis los nombres de los campos, su formato, etc
En este corto post voy a demostrar como hacer uso de esta funcionalidad. En este artículo no pretendo explicar SPARQL, aunque si veo interés puede ser un futuro tutorial.
Una petición simple
Para hacer una petición, podemos usar cURL o cualquier programa similar para lanzar una petición a https://blog.adrianistan.eu/api. Hay tres requisitos:
- la petición debe ser POST
- la petición debe declarar su Content-Type como application/sparql-query (tal y como dicta el estándar W3C)
- en el cuerpo debe estar la consulta SPARQL en texto plano
Veamos un ejemplo sencillo usando cURL
curl -X POST https://blog.adrianistan.eu/api -d "SELECT ?id WHERE { ?id ?b ?c.} LIMIT 5" --header "Content-Type: application/sparql-query"
El resultado es el siguiente:
El resultado está en formato JSON. Actualmente no es configurable el formato de salida.
Una petición más compleja
Esta primera petición no aportaba gran cosa, simplemente devolvía resultados. Ahora vamos a hacer una query seria.
La query devolverá las URL de la gente que comenta en el blog:
PREFIX schema: <http://schema.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?url
WHERE {
?comment rdf:type schema:Comment.
?comment schema:author ?author.
?author schema:url ?url.
FILTER(!regex(?url,"adrianistan.eu","i")).
}
Y si enviamos la query a la API, nos responde con las URL de vuestros comentarios:
Como véis, la API es bastante potente y aunque su uso vaya a ser anecdótico, quería tener una API de consulta en condiciones.