Información para Reutilizadores

El portal ofrece la posibilidad de Acceso a los datos mediante un API Application Programming Interface).

Body

 

Introducción

Esta sección del CNMC|Data tiene como objetivo ofrecer información relevante a los desarrolladores de aplicaciones que deseen reutilizar de forma programática los datos que se publican en el portal de datos abiertos de la CNMC.

 

La API de CNMC|Data

El portal de datos abiertos de la CNMC, además de permitir la consulta y descarga interactiva de los datos a través de distintos formatos abiertos, ofrece también la posibilidad de obtener dichos datos a través de una API (Application Programming Interface o Interfaz de Programación de Aplicaciones).

Esta API que se pone a disposición es la API que ofrece CKAN, la herramienta de catálogo de datos sobre la herramienta de catálogo de datos en la que se basa este portal. Dicha API permite realizar consultas REST en formato JSON, tanto sobre el catálogo de datos (información del catálogo, listado de conjuntos de datos o datasets y sus recursos), como sobre los datos del conjunto de datos (recuperando todos los datos o los datos filtrados).

A continuación, se muestran las consultas API consideradas más relevantes, aunque si se desea más información sobre la API de CKAN se puede acceder a la propia Guía de la API de CKAN.

Consultas API de información del catálogo

Esta API permite consultar la información que se encuentra disponible en CNMC|Data acerca de los recursos, datasets y sus metatados (descripción de los datasets). Estas consultas de la información del catálogo no permiten acceder directamente a los datos de los datasets, ya que en ese caso debe consultarse sobre el datastore (ver apartado "Consultas API de los datos de un conjunto de datos").

Algunos ejemplos de consultas que se pueden realizar son los siguientes:

Listado de todos los conjuntos de datos del catálogo y sus metatados

  • Consulta web

    El resultado de esta consulta sería el que se muestra en la siguiente imagen.

    Resultado de la consulta

    El número de conjuntos de datos obtenidos es de 163 y el detalle de cada uno puede consultarse en el campo (de tipo array) results.

    Por ejemplo, el detalle de un conjunto de datos sería:

    Resultado del detalle de un dataset

  • Python (ejemplo de la consulta anterior embebida en código Python)

    Llamada:

    # Se importa la librería para la llamada a la API
    import requests
    
    # Se crea una cabecera para informar del "User-Agent"
    header = {"User-Agent": "Application"}
    # LLamada API al catálogo
    url = "https://catalogodatos.cnmc.es/api/3/action/package_search"
    # Obtención de los resultados
    r = requests.get(url, headers=header)
    print(f"Response: {r.json()}")
    

    Resultado:

    {
      "help": "https://catalogodatos.cnmc.es/api/3/action/help_show?name=package_search",
      "success": true,
      "result": {
        "count": 163,
        "facets": {},
        "results": [
          {
            "author": "CNMC",
            "author_email": "cnmcdata@cnmc.es",
            "creator_user_id": "de24e8b1-0fdf-4405-b43d-7ca51e7efc2a",
            "id": "80df3c54-56de-4d7a-8b81-580f6da7dbac",
            "isopen": true,
            "license_id": "cc-by-sa",
            "license_title": "Creative Commons Attribution Share-Alike",
            "license_url": "http://www.opendefinition.org/licenses/cc-by-sa",
            "maintainer": "Administrador OpenData CNMC",
            "maintainer_email": null,
            "metadata_created": "2023-04-21T10:41:17.433548",
            "metadata_modified": "2023-04-21T11:13:09.191202",
            "name": "ds_1392_1",
            "notes": "Estadística Petroleo - 2023 - Consumos mensuales provincial (Tm)",
            "num_resources": 4,
         ...
    }
    

 

Consultas API de los datos de un conjunto de datos

Esta API permite consultar los datos asociados a la última versión publicada de un conjunto de datos (recurso). Dichas consultas se realizan sobre la funciones API del datastore, las cuales acceden a las tablas en la que se almacenan los datos. 

La consulta de datos de un determinado recurso (versión de un dataset) requiere de la obtención previa de su identificador a través de una consulta al catálogo de datos.  

A continuación se muestra un ejemplo de consulta de los datos de un conjunto de datos.

Obtención de los datos de un conjunto de datos

  • Consulta web

    Se realiza una primera consulta para obtener la información asociada a un dataset según el nombre del dataset.

    Del resultado de la consulta, se puede obtener el valor de id del primer recurso recuperado que se corresponde con un formato CSV.

    Obtener el id del dataset

    En este caso el valor es de results[0].resources[0].id es 8afd824c-034e-4ca3-b6b5-de1bb92002ad.

    Posteriormente, se realiza una segunda consulta para la obtención de todos los datos de este recurso, pasando como parámetros el límite máximo de resultados que se espera obtener y el identificador del recurso.

    El resultado de esta consulta mostrará todos los datos de este recurso en la lista de records.

    Consulta de datos del dataset

  • Python (ejemplo de la consulta anterior embebida en código Python)

    Llamada:

    # Se importa la librería para la llamada a la API
    import requests
    
    # Llamada API para obtener la información del recurso del catálogo de un dataset
    header = {"User-Agent": "Application"}
    url = 'https://catalogodatos.cnmc.es/api/3/action/package_search?q=' +\
          '"Estadística Petroleo - 2023 - Consumos mensuales provincial (Tm)"'
    r = requests.get(url, headers=header)
    
    # Obtención del identificador del recurso con los datos del dataset
    datos_catalogo = r.json()
    id_recurso = datos_catalogo['result']['results'][0]['resources'][0]['id'];
    print(f"Identificador del recurso: {id_recurso}")
    
    # LLamada API para obtener todos los datos del recurso del dataset
    url = 'https://catalogodatos.cnmc.es/api/3/action/datastore_search?' +\
        'limit=32000&' +\
        'resource_id='+ id_recurso
    r = requests.get(url, headers=header)
    datos_dataset = r.json()['result']['records']
    print(f"Los datos del dataset son: {datos_dataset}")
    

    Resultado:

    [
      {
        "_id": 1,
        "fecha": "2023-01",
        "ccaa": "Andalucía",
        "provincia": "Almería",
        "tipo_producto": "BIODIESEL",
        "consumo": 0.0
      },
      {
        "_id": 2,
        "fecha": "2023-01",
        "ccaa": "Andalucía",
        "provincia": "Almería",
        "tipo_producto": "GASÓLEO A",
        "consumo": 27269.0
      },
      {
        "_id": 3,
        "fecha": "2023-01",
        "ccaa": "Andalucía",
        "provincia": "Almería",
        "tipo_producto": "GASÓLEO B",
        "consumo": 5780.0
      },
      ...
    ]