Indicadores al día. API RSS

29.06.2017

El servicio de Indicadores al día proporciona información básica de una selección de indicadores coyunturales y estructurales de Cataluña.

La utilización de este servicio comporta la aceptación de las condiciones de uso de las API del Idescat.

Resumen
URI base https://api.idescat.cat/indicadors/v1/{operación}.{formato}[?parámetros]
Método HTTP GET
Formatos de la respuesta xml, json, php
Versión 1.00 (14.12.2009)
Atajos Petición, Respuesta, Ejemplos
Operaciones dades, nodes
Widgets que utilizan este servicio Últimos indicadores, Gráfico de evolución de indicadores

1. Petición

1.1 Anatomía de las peticiones

Toda petición debe especificar obligatoriamente el servicio, la versión, la operación y el formato. Versión y operación son características específicas de cada servicio. Si no se dice lo contrario, el servicio soporta los formatos de respuesta generales de las API del Idescat. Para más información, consulte el apartado Anatomía de las peticiones en la documentación general de las API del Idescat.

1.1.1 Identificador del servicio y versión

El servicio de Indicadores al día se identifica con el valor indicadors.

https://api.idescat.cat/indicadors/v1/{…}

1.1.2 Operaciones

Admite dos tipos de operaciones:

  • dades: Devuelve datos en forma de serie temporal en Cataluña y España del indicador al día escogido. Véase la sección 1.2.1.
    https://api.idescat.cat/indicadors/v1/dades.{…}
  • nodes: Devuelve el árbol de los indicadores disponibles. Véase la sección 1.2.2.
    https://api.idescat.cat/indicadors/v1/nodes.{…}

1.2 Parámetros específicos

Los parámetros específicos ("variables") permiten escoger la información que devolverá una determinada operación del servicio de Indicadores al día. Se pueden especificar como parámetros individuales o en un único parámetro p (forma compacta). En esta documentación, se utiliza siempre la forma compacta.

Para conocer los parámetros generales disponibles para cualquier servicio, consulte la documentación de las API del Idescat.

1.2.1 Operación dades

Permite seleccionar un conjunto fijo de indicadores del cual se quiere obtener información o bien aquellos indicadores más recientes (sean los que sean).

1.2.1.1 Indicadores predeterminados
  • i: lista de los identificadores (separados por comas) de cuyos indicadores se devolverá información.

Para conocer los identificadores de los diferentes indicadores disponibles, utilice la operación nodes. El ejemplo 23 muestra la lista actual de indicadores y sus identificadores.

Si esta variable de selección está presente (aunque no tenga un valor asignado), se ignorará el resto de parámetros específicos.

Ej. 1: Series de Cataluña y España de los indicadores 0801 y 0802, en formato XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=i/0801,0802
1.2.1.2 Últimos indicadores

Permite seleccionar los indicadores según la combinación de tres criterios:

  • tt: tiempo transcurrido. Permite seleccionar los indicadores de acuerdo con los días transcurridos desde su publicación. El valor 1 selecciona los indicadores publicados hoy; 2 selecciona los indicadores de hoy y ayer; etc. El valor por defecto es 0 e indica que la selección de indicadores no está limitada por el tiempo transcurrido.
  • max: máximo número de indicadores. Limita el número de indicadores mostrados, sea cual sea el tiempo transcurrido. El valor 0 indica que la selección de indicadores no está limitada por un número. El valor por defecto es 6.
  • min: mínimo número de indicadores. Garantiza que se muestre un número mínimo de indicadores, sea cual sea el tiempo transcurrido. El valor por defecto es 6.

Los indicadores se devuelven en orden inversamente cronológico.

Ej. 2: Indicadores de los últimos 14 días (incluido hoy), pero garantizando la obtención de 3 indicadores y limitando el resultado a un máximo de 10, en formato XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=tt/14;max/10;min/3
Ej. 3: Últimos 3 indicadores, en formato JSON
https://api.idescat.cat/indicadors/v1/dades.json?p=tt/0;max/3;min/3
Ej. 4: Indicadores de los últimos 3 días (incluido hoy) sin importar el número máximo ni el mínimo, en formato PHP serializado
https://api.idescat.cat/indicadors/v1/dades.php?p=tt/3;max/0;min/0
Ej. 5: Todos los indicadores existentes sin importar el tiempo transcurrido, en formato XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=tt/0;max/0;min/0

Atención: El tiempo de respuesta de esta petición puede ser significativo. Se aconseja dimensionar las peticiones a las necesidades reales de información. En ningún caso se deben solicitar todos los indicadores sin mantener algún tipo de caché en la máquina solicitante.

1.2.2 Operación nodes

Devuelve la lista de indicadores disponibles, con su identificador y una descripción, agrupados en apartados y subapartados. El parámetro i permite filtrar los apartados que se muestran.

  • i: lista de los identificadores (separados por comas) de cuyos apartados se devolverá información. Si no se especifica, se mostrarán todos los apartados.

Para conocer los identificadores de los apartados disponibles actualmente, utilice la operación nodes sin especificar i.

Ej. 6: Árbol de todos los indicadores disponibles, en formato JSON con función de devolución ("func")
https://api.idescat.cat/indicadors/v1/nodes.json?callback=func
Ej. 7: Árbol de los indicadores disponibles del apartado de Coyuntura (0), en formato XML
https://api.idescat.cat/indicadors/v1/nodes.xml?p=i/0

2. Respuesta

Para conocer los códigos de respuesta HTTP devueltos y los formatos soportados por cualquier servicio, consulte el apartado 2 de las API del Idescat.

2.1 Estructura de los resultados

2.1.1 El elemento raíz indicadors

El elemento raíz (indicadors) incluye los siguientes atributos:

  • version: versión del servicio.
  • lang: idioma general del documento. Si el valor de algún elemento textual no utiliza este idioma tendrá su propio atributo lang. Los valores aceptados en la actualidad son ca (valor por defecto), es y en.
  • o: operación solicitada.
  • p: valores asignados a los parámetros específicos, si hay.
  • n: número de indicadores o nodos finales con información de que se han incluido en el documento. Este número no coincide con el número de elementos devueltos cuando de algún indicador o nodo final no se ha obtenido información válida.
Ej. 8: Atributos del elemento raíz en una operación dades
<indicadors
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 version="1.00"
 lang="ca"
 o="dades"
 n="6"
 p="tt=0;max=6;min=6;"
>
Ej. 9: Atributos del elemento raíz en una operación nodes
<indicadors
 version="1.00"
 lang="ca"
 o="nodes"
 n="84"
 p="i=0,1"
>

2.1.2 Los elementos i de la operación dades

La información de cada indicador se incluye en el elemento i. Además de la información de Cataluña, podría incluir información de comparación de uno o más ámbitos geográficos (en la actualidad, sólo de España).

Ej. 10: Elemento i de la operación dades
<i id="0302">
 <c>Pernoct. hotels</c>

 <r title="gen/09">2009-01</r>
 <d>Variació interanual de pernoctacions en establiments hotelers</d>
 <v>-12.0</v>
 <s>Idescat, a partir de l'Enquesta d'ocupació hotelera de l'INE</s>

 <vc g="es">-11.5</vc>
 <sc g="es">INE</sc>
 <ts>-1.0,7.9,15.2,-16.6,2.4,-1.2,2.8,1.4,-3.7,-5.6,-10.5,-6.6,-12.0</ts>
 <tsc g="es">1.2,8.6,9.6,-11.9,6.2,-2.8,0.4,-0.5,-3.2,-5.3,-11.0,-10.6,-11.5</tsc>

 <u s="%">%</u>
 <l>https://www.idescat.cat/economia/inec?tc=3&id=0302</l>
 <m>https://www.idescat.cat/economia/inec?tc=7&id=0302</m>

 <t i="c">Conjuntura econòmica</t>
 <dc:date>2009-03-04T14:07:00+00:00</dc:date>
</i>
2.1.2.1 Elementos generales

Los elementos generales son:

  • c: concepto. Por ejemplo, "IPC".
  • d: descripción del indicador. Por ejemplo, "Variación interanual del índice de precios de consumo".
  • r: referencia temporal. Contiene al menos un año (cuatro dígitos). Por ejemplo, "2009". La especificación de año puede ir seguida de un guión. Si tras el guión hay un número de dos dígitos indica mes ("2009-10": octubre del 2009); si sólo hay uno, indica trimestre ("2009-3": tercer trimestre del 2009). Otros periodos de referencia se expresan en forma de intervalo (fecha de inicio y final separadas por coma). Por ejemplo, "2009-01,2009-05" indica el periodo enero-mayo del 2009. El elemento r contiene un atributo title que incluye la referencia temporal en forma de texto breve en el idioma general lang. Por ejemplo: "gen/09".
  • u: este elemento se utiliza para facilitar información sobre las unidades del indicador. Su contenido puede proporcionar un texto brevísimo concatenable al valor. En la actualidad, sólo se utiliza para pasar el símbolo "%"; en el resto de casos está en blanco. Este elemento contiene un atributo s que no está plenamente desarrollado en la actual versión de la API.
  • l: Enlace con la página del indicador.
  • m: Enlace con la página de la metodología del indicador.
  • t: Texto descriptivo del tipo de indicador en el idioma general lang. El atributo i incluye una versión codificada (c=coyuntura; e=estructura).
  • dc:date: fecha de actualización del indicador (por ejemplo, "2009-03-08T11:05:00+00:00"). Véase la Dublin Core Metadata Initiative.
2.1.2.2 Elementos específicos del ámbito geográfico

Indicadores al día está concebido como un servicio que proporciona información de Cataluña. Adicionalmente, puede ofrecer la misma información para otros ámbitos de comparación. La información de Cataluña está contenida en los siguientes elementos (que siempre están presentes):

  • Valores

    Los elementos que contienen valores indican los decimales con punto (por ejemplo, "10.5"). Los valores faltantes se indican con "_".

    • v: valor del último periodo disponible. Este valor, que también se proporciona en el elemento ts, se ofrece en v por conveniencia.
    • ts: serie temporal. Los valores de la serie, ordenados de más antiguo a más reciente, van separados por comas. En general, la serie se inicia en el mismo periodo de referencia de los datos actuales pero de un año atrás. Por lo tanto, si la periodicidad de los datos es mensual, se incluyen 13 observaciones y, si es trimestral, 5. En el caso de valores anuales, se ofrecen hasta 5 años (o menos si la serie de datos disponibles es más corta). Si no hay una serie temporal disponible, este elemento no estará presente.
  • Textos
    • s: texto que expresa la fuente de los datos.

Si hay información disponible para otros ámbitos geográficos, se incluyen en los elementos vc, tsc y sc, que tienen el mismo significado que los correspondientes v, ts y s. Estos tres nuevos elementos incluyen un atributo g que indica el ámbito geográfico (en estos momentos siempre es igual a "es"). Si el último valor de la serie del ámbito de comparación (tsc) no está disponible, vc estará presente pero con el valor "_".

Dado que en estos momentos la fuente de los datos (tanto para Cataluña como para España) no está traducida, cuando se solicite el resultado en un idioma diferente del catalán tanto s como sc incluirán el atributo lang igual a "ca".

2.1.3 Los elementos v de la operación nodes

Los indicadores se agrupan en apartados y subapartados. Esta jerarquía se expresa en una serie de elementos v imbricados. Cada elemento dispone de un identificador (atributo id). Los nodos finales (indicadores) contienen un texto descriptivo sobre la forma de cómputo (atributo desc), así como la fecha de actualización del indicador (atributo date).

Ej. 11: Elementos v de la operación nodes
<v id="0">Indicadors de conjuntura
 <v id="00">Comptabilitat trimestral
  <v id="0005"
       desc="Variació interanual en volum corregida d'efectes estacionals i de calendari"
       date="2009-11-20T14:36:00+00:00">
       PIB</v>
 </v>
 <v id="01">Indústria
  <v id="0101"
       desc="Variació interanual de l'índex de producció industrial"
       date="2009-10-14T08:32:00+00:00">
       IPI
  </v>
  <v id="0102"
       desc="Saldo de respostes sobre el clima industrial"
       date="2009-11-06T10:53:00+00:00">
       Clima industrial
  </v>
  <v id="0103"
       desc="Variació interanual de la facturació d'energia elèctrica"
       date="2009-11-10T12:08:00+00:00">
       Energia elèctrica
  </v>
 </v>
...
</v>

2.2 Errores

Las API del Idescat utilizan códigos de respuesta normalizados para indicar si la petición ha tenido éxito o si ha fracasado. Las peticiones al API de Indicadores al día pueden tener éxito, pero no devolver alguno de los indicadores solicitados, bien porque no existe en la actualidad o no ha existido nunca (identificador incorrecto), bien porque el indicador no esté disponible temporalmente (por ejemplo, porque se está revisando).

2.2.1 Operación dades

El elemento i del indicador sin información dispondrá del atributo error para indicar:

  • 403: Indicador existente pero no disponible temporalmente. El elemento c será el único descendente devuelto.
  • 404: Indicador inexistente en la actualidad (identificador no válido). El elemento c contendrá un texto explicativo del error en el idioma de la petición.

Se puede saber el número de indicadores de los cuales se ha devuelto información gracias al atributo n del elemento indicadors.

Ej. 12: Salida con dos indicadores erróneos de los tres solicitados
<?xml version="1.0" encoding="utf-8" ?>
<indicadors
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 lang="ca"
 o="dades"
 n="1"
 p="i=0501,9999,0701"
>
 <i id="0501" error="403">
   <c>Vehicles</c>
 </i>
 <i id="9999" error="404">
   <c>Indicador no trobat</c>
 </i>
 <i id="0701">
     <c>IPC</c>
     <r title="set/09">2009-09</r>
     <d>Variació interanual de l'índex de preus de consum</d>
     <v>-0.5</v>
     <s>INE</s>
     <vc g="es">-1.0</vc>
     <sc g="es">INE</sc>
     <ts>4.5,3.6,2.5,1.6,1.1,1.0,0.4,0.4,-0.3,-0.5,-0.9,-0.3,-0.5</ts>
     <tsc g="es">4.5,3.6,2.4,1.4,0.8,0.7,-0.1,-0.2,-0.9,-1.0,-1.4,-0.8,-1.0</tsc>
     <u s="%">%</u>
     <l>https://www.idescat.cat/economia/inec?tc=3&id=0701</l>
     <m>https://www.idescat.cat/economia/inec?tc=7&id=0701</m>
     <t i="c">Conjuntura econòmica</t>
     <dc:date>2009-10-14T08:32:00+00:00</dc:date>
  </i>
</indicadors>

2.2.2 Operación nodes

El elemento v de aquellos indicadores existentes pero no disponibles temporalmente tendrá el atributo error con valor 403. Además, no dispondrá de atributo desc ni date.

Ej. 13: Fragmento del árbol con un indicador no disponible temporalmente
<v id="59">Sector exterior
 <v id="5901" error="403">Exportacions</v>
 <v id="5905" desc="Variació de les importacions" date="2009-10-24T17:32:00+00:00">Importacions</v>
</v>

3. Ejemplos

3.1 Salida en formato JSON procesada con Javascript

La siguiente petición solicita el último indicador disponible en formato JSON (UTF-8, en castellano) con función de devolución:

https://api.idescat.cat/indicadors/v1/dades.json?p=max/1;min/1&callback=f

Su resultado puede procesarse en Javascript para mostrar la información básica asociada al último indicador de la siguiente manera:

Ej. 14: Fragmento HTML+JS para procesar la petición del último indicador disponible en formato JSON con función de devolución
<script type="text/javascript">
<!--//--><![CDATA[//><!-- 
function f(json) {
 var html;
 if(document.getElementById){
 document.getElementById("darrerindicador").innerHTML="Cargando...";
 if (json) {
 if(typeof(json) == "object" && typeof(json.indicadors) == "object" && json.indicadors.n==1){
 html =
 "<ul><li><strong>Concepto:<\/strong> "+ json.indicadors.i.c + "<\/li>"+
 "<li><strong>Fecha de referencia:<\/strong> "+ json.indicadors.i.r.title + "<\/li>"+
 "<li><strong>Valor:<\/strong> " + 
 json.indicadors.i.v.replace(".",",") + json.indicadors.i.u.s + "<\/li>"+
 "<li><strong>Significado:<\/strong> " + json.indicadors.i.d + "<\/li>" +
 "<li><strong>Resultados:<\/strong> <a href=\""+json.indicadors.i.l.replace(/&/g,"&amp;")+"\">" +
 json.indicadors.i.l.replace(/&/g,"&amp;") + "<\/a><\/li>" +
 "<li><strong>Metodología:<\/strong> <a href=\""+json.indicadors.i.m.replace(/&/g,"&amp;")+"\">" +
 json.indicadors.i.m.replace(/&/g,"&amp;") + "<\/a><\/li>" +
 "<li><strong>Fecha de actualización:<\/strong> " +
 json.indicadors.i['dc:date'].substring(8,10) +"."+
 json.indicadors.i['dc:date'].substring(5,7) + "." +
 json.indicadors.i['dc:date'].substring(0,4)+ "<\/li>"+
 "<li><strong>Fuente:<\/strong> "+ json.indicadors.i.s + "<\/li><\/ul>"
 ;
 }else{
 html = "El servicio no ha devuelto la información solicitada.";
 }
 }else{
 html = "El servicio no está disponible en estos momentso.";
 }
 document.getElementById("darrerindicador").innerHTML=html;
 }
}
//--><!]]>
</script>

<div id="darrerindicador">Conectando...</div>

<script type="text/javascript"
 src="//api.idescat.cat/indicadors/v1/dades.json?p=min/1;max/1&amp;callback=f&amp;lang=es">
</script>
Ej. 15: Resultado: información del último indicador actualizado

3.2 Salida en formato XML procesada con XSLT

La siguiente petición solicita los últimos 6 (valor por defecto) indicadores en formato XML:

https://api.idescat.cat/indicadors/v1/dades.xml

Este resultado puede transformarse empleando un documento XSLT para obtener un fragmento HTML insertable en una página web. El siguiente ejemplo muestra un documento XSLT que genera una tabla similar a la de la página principal del Idescat a partir de la información facilitada en la petición anterior.

Ej. 16: XSLT para generar una tabla de los últimos indicadores teniendo en cuenta el idioma del documento XML de referencia
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/">
 <xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
 indent="yes" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
 <xsl:variable name="lang" select="/indicadors/@lang" />

 <xsl:template match="/">
 <style type="text/css">
 #IdescatInd {
 margin: 0.5em;
 width: 278px;
 }
 #IdescatInd, #IdescatInd a {
 font-size: 11px;
 font-family: verdana,arial,helvetica,swiss,sans-serif;
 }
 caption, tr.cap {
 display: none;
 }
 a:link, a:visited, a:hover, a:active {
 text-decoration: none;
 color: #00c;
 }
 a:visited {
 font-style: italic;
 }
 a.neg:link, a.neg:visited, a.neg:hover, a.neg:active {
 color: #c00;
 }
 table {
 width: 100%;
 border: 0;
 border-collapse: collapse;
 }
 th {
 font-weight: normal;
 text-align: left;
 vertical-align: top;

 background-image: none;
 padding: 0;
 background-color: inherit;
 }
 tr {
 border-bottom: 1px dotted #ccc;
 }
 td {
 text-align: right;
 vertical-align: bottom;
 padding: 0;
 }
 th, td {
 white-space: nowrap;
 border-bottom: 1px dotted #ccc;
 padding-bottom: 1px;
 }
 tr.over td, tr.over th,
 tr:hover * {
 background-color:#f0f0f0;
 }
 .over {
 cursor: pointer;
 }
 em {
 display: block;
 text-align: center;
 padding-top: 0.5em;
 }
 </style>
 <script type="text/javascript">
 function c(e){
 var link=e.getElementsByTagName('a')[0];
 window.top.location.href=link.href;
 }
 function v(e){
 e.className='over';
 }
 function o(e){
 e.className='';
 }
 </script>

 <div id="IdescatInd">
 <xsl:variable name="sum">
 <xsl:choose>
 <xsl:when test="$lang='es'">
 <xsl:value-of select="'Últimos indicadores publicados'"/>
 </xsl:when>
 <xsl:when test="$lang='en'">
 <xsl:value-of select="'Latest indicators'"/>
 </xsl:when>
 <xsl:otherwise>
 <xsl:value-of select="'Darrers indicadors publicats'"/>
 </xsl:otherwise>
 </xsl:choose>
 </xsl:variable>
 <table summary="{$sum}">
 <caption>
 <xsl:choose>
 <xsl:when test="$lang='es'">Selección de indicadores</xsl:when>
 <xsl:when test="$lang='en'">Selection of indicators</xsl:when>
 <xsl:otherwise>Selecció d'indicadors</xsl:otherwise>
 </xsl:choose>
 </caption>
 <tbody>
 <tr class="cap">
 <th scope="col">
 <xsl:choose>
 <xsl:when test="$lang='en'">Indicator</xsl:when>
 <xsl:otherwise>Indicador</xsl:otherwise>
 </xsl:choose>
 </th>
 <th scope="col">
 <xsl:choose>
 <xsl:when test="$lang='en'">Value</xsl:when>
 <xsl:otherwise>Valor</xsl:otherwise>
 </xsl:choose>
 </th>
 </tr>
 <xsl:apply-templates select="/indicadors/i"/>
 </tbody>
 </table>
 </div>
 </xsl:template>
 <xsl:template match="i">
 <xsl:variable name="v" select="v"/>
 <tr title="{d}" onclick="c(this)" onmouseover="v(this)" onmouseout="o(this)">
 <th scope="row" class="over"><a href="{l}"><xsl:value-of select="c"/>
 <xsl:text> </xsl:text><xsl:value-of select="r/@title"/></a></th>
 <td class="over">
 <xsl:choose>
 <xsl:when test="$lang='en' or not(contains($v,'.'))"><xsl:value-of select="$v"/></xsl:when>
 <xsl:otherwise>
 <xsl:value-of select="substring-before($v,'.')"/>,<xsl:value-of select="substring-after($v,'.')"/>
 </xsl:otherwise>
 </xsl:choose>
 <xsl:choose>
 <xsl:when test="u='%'"><xsl:value-of select="u"/></xsl:when>
 <xsl:otherwise>
 <xsl:text> </xsl:text><xsl:value-of select="u"/>
 </xsl:otherwise>
 </xsl:choose>
 </td>
 </tr>
 </xsl:template>
</xsl:stylesheet>

(Para simplificar, en este documento XSLT se ha incluido la generación de código Javascript y CSS en medio del código HTML: normalmente esta información se especificaría en ficheros aparte, puesto que no depende del resultado de la petición.)

3.3 Salida en formato PHP serializado procesada con PHP

3.3.1 Operación dades

Las API del Idescat pueden combinarse con otros API para crear un servicio nuevo (en la terminología anglosajona, mashup). El siguiente ejemplo ilustra esta posibilidad: utiliza la API de Indicadores al día para obtener información actualizada de exportaciones (i=0801) e importaciones (i=0802) de Cataluña y el API de Google Chart para representar gráficamente los datos.

Ej. 17: Resultado: gráficos de evolución de las exportaciones e importaciones en Cataluña

En el ejemplo, la información se solicita en formato PHP serializado y se procesa con PHP. La página está codificada en ISO-8859-1 y usa la función indicadors() que admite una lista de identificadores ("0801,0802": exportaciones e importaciones).

Ej. 18: Contenedor HTML con invocación a la función indicadors()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
 <head>
  <title>Ejemplo de uso de la API de Indicadores al día en PHP</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="es" />  
  <style type="text/css">
   body {
    font-family: Arial, Helvetica, Swiss, sans-serif;
   }
   a {
    display: block;
   }
   img {
    border: none;
   }
   h1 {
    text-align: center;
    border-bottom: 1px dotted #ccc;
    font-size: 100%;
   }
   .graf {
    float: left;
    width: 170px;
    margin: 0.4em;
   }
  </style>
 </head>
 <body><?php indicadors("0801,0802"); ?></body>
</html>

La función indicadors() obtiene los datos del Idescat y los pasa a la función graf(), que genera el código HTML del gráfico según la API de Google Chart. La función PHP unserialize() se utiliza para convertir la información obtenida en un objeto.

Ej. 19: Función indicadors()
function indicadors($id){
 $url="https://api.idescat.cat/indicadors/v1/dades.php?i=".$id."&lang=es";

 $r = file_get_contents($url);
 if ($r === false) {
  print("La petición ha fallado.");
  return;
 }

 $o = unserialize($r);
 if(is_object($o) && $o->indicadors){
  if(is_array($o->indicadors->i)){
   foreach ($o->indicadors->i as $indicador){
    graf($indicador);
   }
  }else{
   graf($o->indicadors->i);
  }
 }else{
  print("La respuesta no es correcta.");
  return;
 }
}

La función graf() toma como argumento el objeto con la información solicitada y la procesa para generar HTML con el gráfico de Google Chart.

Dado que en el ejemplo la página HTML está en ISO-8859-1 y que el formato PHP serializado devuelve siempre el resultado codificado como UTF-8, hará falta convertir algunos literales con la función PHP utf8_decode().

La petición podría contener un identificador de indicador incorrecto. O el indicador podría no estar disponible temporalmente. La función graf() detecta estas situaciones cuando aparece un atributo error dentro del elemento i y genera un mensaje informativo.

Ej. 20: Función graf()
function graf($o){
 if(isset($o->error)){
  print("<div class=\"graf\">Error ".$o->error.": ".utf8_decode($o->c).": ".$o->id."</div>");
  return;
 }

 $nom = utf8_decode($o->c." ".$o->r->title);
 if(strpos($o->ts,"_")===false){
  $cos=24;
  $pos=55;

  $wh="170x100";
  $colors=array("text"=>"000000","XAxis"=>"CCCCCC","line"=>"336699","punt"=>"ff0000");

  $serie=$o->ts;
  $vserie=split(',',$serie.",0");
  $max = max($vserie);
  $min = min($vserie);
  $valor = str_replace(".", ",", $o->v);
  $unitats = $o->u->content;
  if($unitats=="%") $valor.=$unitats;
  $url =  str_replace("&","&amp;",$o->l);
  $desc = utf8_decode($o->d);
  $grafic="http://chart.apis.google.com/chart?cht=lc&amp;chs=".$wh."&amp;chd=t:0,0|".$serie."&amp;chds=".$min.",".
               $max."&amp;chxt=r,x,y&amp;chxl=0:|".$valor."|1:||2:||&amp;chxs=0,".$colors['text'].",".$cos.
               ",0,_|1,CC0000,1,0,_|2,CC0000,1,0,_&amp;chco=".$colors['XAxis'].",".$colors['line'].
               "&amp;chls=1,1,0|1,1,0&amp;chxp=0,".$pos."&amp;chm=o,".$colors['punt'].",1,12,6,0";

  print("<div class=\"graf\"><h1>".$nom."</h1><a href=\"".$url."\"><img src=\"".$grafic."\" alt=\"".$valor."\" title=\"".
            $desc."\" /></a></div>");
 }else{
  print("<div class=\"graf\">".$nom.": Faltan valores en la serie</div>.");
 }
}
Ej. 21: Código del ejemplo PHP completo
<?php
 function indicador($id){
  $url="https://api.idescat.cat/indicadors/v1/dades.php?i=".$id."&lang=es";

  $r = file_get_contents($url);
  if ($r === false) {
   print("La petición ha fallado.");
   return;
  }

  $o = unserialize($r);
  if(is_object($o) && $o->indicadors){
   if(is_array($o->indicadors->i)){
    foreach ($o->indicadors->i as $indicador){
     graf($indicador);
    }
   }else{
    graf($o->indicadors->i);
   }
  }else{
   print("La respuesta no es correcta.");
   return;
  }
 }

 function graf($o){
  if(isset($o->error)){
   print("<div class=\"graf\">Error ".$o->error.": ".utf8_decode($o->c).": ".$o->id."</div>");
   return;
  }

  $nom = utf8_decode($o->c." ".$o->r->title);
  if(strpos($o->ts,"_")===false){
   $cos=24;
   $pos=55;

   $wh="170x100";
   $colors=array("text"=>"000000","XAxis"=>"CCCCCC","line"=>"336699","punt"=>"ff0000");

   $serie=$o->ts;
   $vserie=split(',',$serie.",0");
   $max = max($vserie);
   $min = min($vserie);
   $valor = str_replace(".", ",", $o->v);
   $unitats = $o->u->content;
   if($unitats=="%") $valor.=$unitats;
   $url =  str_replace("&","&amp;",$o->l);
   $desc = utf8_decode($o->d);
   $grafic="http://chart.apis.google.com/chart?cht=lc&amp;chs=".$wh."&amp;chd=t:0,0|".$serie."&amp;chds=".$min.",".
                $max."&amp;chxt=r,x,y&amp;chxl=0:|".$valor."|1:||2:||&amp;chxs=0,".$colors['text'].",".$cos.
                ",0,_|1,CC0000,1,0,_|2,CC0000,1,0,_&amp;chco=".$colors['XAxis'].",".$colors['line'].
                "&amp;chls=1,1,0|1,1,0&amp;chxp=0,".$pos."&amp;chm=o,".$colors['punt'].",1,12,6,0";

   print("<div class=\"graf\"><h1>".$nom."</h1><a href=\"".$url."\"><img src=\"".$grafic."\" alt=\"".$valor."\" title=\"".
             $desc."\" /></a></div>");
  }else{
   print("<div class=\"graf\">".$nom.": Faltan valores en la serie</div>.");
  }
 }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
 <head>
  <title>Ejemplo de uso de la API de Indicadores al día en PHP</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="es" />  
  <style type="text/css">
   body {
    font-family: Arial, Helvetica, Swiss, sans-serif;
   }
   a {
    display: block;
   }
   img {
    border: none;
   }
   h1 {
    text-align: center;
    border-bottom: 1px dotted #ccc;
    font-size: 100%;
   }
   .graf {
    float: left;
    width: 170px;
    margin: 0.4em;
   }
  </style>
 </head>
 <body>
 <?php indicador("0801,0802"); ?>
 </body>
</html>

3.3.2 Operación nodes

El siguiente ejemplo muestra cómo procesar la información del árbol de los i al día.

Ej. 22: Fragmento de las funciones PHP que construyen la tabla de indicadores
<?php
 $url="https://api.idescat.cat/indicadors/v1/nodes.php?lang=$lang";

 function Literal($s){
  return utf8_decode(str_replace("&","&amp;",$s));
 }
 function print_tr($o,$e){
  switch($e){
   case 0:
    print("<table class=\"ApartNum Interactiva\"><caption>".Literal($o->content).
         "</caption><tbody><tr class=\"cap\"><th scope=\"col\" class=\"etieti\">Denominación</th>".
         "<th scope=\"col\">Identificador</th></tr>");
    break;
   case 1:
    print("<tr class=\"separada total\"><th colspan=\"2\" scope=\"col\">".Literal($o->content)."</th></tr>\n");
   break;
   default:
    if($o->desc){
     $desc=Literal($o->desc);
    }else{
     $desc="Indicador no disponible temporalmente";
    }
    print("<tr title=\"$desc\"><th scope=\"row\">".Literal($o->content)."</th><td>".Literal($o->id)."</td></tr>\n");
   break;
  }
 }

 $r = file_get_contents($url);
 if ($r !== true) {
  $o = unserialize($r);
  if(is_object($o) && $o->indicadors){
   foreach($o->indicadors->v as $apart){
    print_tr($apart,0);
    foreach($apart->v as $subapart){
     print_tr($subapart,1);
     if(is_array($subapart->v)){
      foreach($subapart->v as $indicador){
       print_tr($indicador,2);
      }
     }else{
      print_tr($subapart->v,2);
     }
    }
    print("</tbody></table>");
   }
  }else{
   print("<p>Error: La respuesta no es correcta.</p>");
  }
 }else{
   print("<p>Error: La petición ha fallado.</p>");
 }
?>
Ej. 23: Apartados, subapartados e indicadores y sus identificadores

Usted está aquí: