Indicadors al dia. API RSS

El servei d'Indicadors al dia proporciona informació bàsica d'una selecció d'indicadors de Catalunya.

La utilització d'aquest servei comporta l'acceptació de les condicions d'ús de les APIs de l'Idescat.

Resum
URI base https://api.idescat.cat/indicadors/v1/{operació}.{format}[?paràmetres]
Mètode HTTP GET
Formats de la resposta xml, json, php
Versió 1.00 (2009.12.14)
Dreceres Petició, Resposta, Exemples
Operacions dades, nodes
Ginys que utilitzen aquest servei Darrers indicadors, Gràfic d'evolució d'indicadors

1. Petició

1.1 Anatomia de les peticions

Tota petició ha d'especificar obligatòriament el servei, la versió, l'operació i el format. Versió i operació són característiques específiques de cada servei. Si no es diu el contrari, el servei suporta els formats de resposta generals de les APIs de l'Idescat. Per a més informació, consulteu l'apartat Anatomia de les peticions a la documentació general de les APIs de l'Idescat.

1.1.1 Identificador del servei i versió

El servei d'Indicadors al dia s'identifica amb el valor indicadors.

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

1.1.2 Operacions

Admet dos tipus d'operacions:

  • dades: Retorna dades en forma de sèrie temporal per a Catalunya i Espanya de l'indicador al dia escollit. Vegeu la secció 1.2.1.
    https://api.idescat.cat/indicadors/v1/dades.{…}
  • nodes: Retorna l'arbre dels indicadors disponibles. Vegeu la secció 1.2.2.
    https://api.idescat.cat/indicadors/v1/nodes.{…}

1.2 Paràmetres específics

Els paràmetres específics ("variables") permeten escollir la informació que retornarà una determinada operació del servei d'Indicadors al dia. Es poden especificar com a paràmetres individuals o en un únic paràmetre p (forma compacta). En aquesta documentació, s'utilitza sempre la forma compacta.

Per conèixer els paràmetres generals disponibles per a qualsevol servei, consulteu la documentació de les APIs de l'Idescat.

1.2.1 Operació dades

Permet seleccionar un conjunt fix d'indicadors del qual es vol obtenir informació o bé aquells indicadors més recents (siguin els que siguin).

1.2.1.1 Indicadors predeterminats
  • i: llista dels identificadors (separats per comes) dels indicadors dels quals es retornarà informació.

Per conèixer els identificadors dels diferents indicadors disponibles, utilitzeu l'operació nodes. L'exemple 23 mostra la llista actual d'indicadors i els seus identificadors.

Si aquesta variable de selecció està present (encara que no tingui un valor assignat), s'ignoraran la resta de paràmetres específics.

Ex. 1: Sèries per a Catalunya i Espanya dels indicadors 0801 i 0802, en format XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=i/0801,0802
1.2.1.2 Darrers indicadors

Permet seleccionar els indicadors d'acord amb la combinació de tres criteris:

  • tt: temps transcorregut. Permet seleccionar els indicadors d'acord amb els dies transcorreguts des de la seva publicació. El valor 1 selecciona els indicadors publicats avui; 2 selecciona els indicadors d'avui i ahir; etc. El valor per defecte és 0 i indica que la selecció d'indicadors no està limitada pel temps transcorregut.
  • max: màxim nombre d'indicadors. Limita el nombre d'indicadors mostrats, sigui quin sigui el temps transcorregut. El valor 0 indica que la selecció d'indicadors no està limitada per un nombre. El valor per defecte és 6.
  • min: mínim nombre d'indicadors. Garanteix que es mostri un nombre mínim d'indicadors, sigui quin sigui el temps transcorregut. El valor per defecte és 6.

Els indicadors es retornen en ordre inversament cronològic.

Ex. 2: Indicadors dels darrers 14 dies (inclòs avui), però garantint l'obtenció de 3 indicadors i limitant el resultat a un màxim de 10, en format XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=tt/14;max/10;min/3
Ex. 3: Darrers 3 indicadors, en format JSON
https://api.idescat.cat/indicadors/v1/dades.json?p=tt/0;max/3;min/3
Ex. 4: Indicadors dels darrers 3 dies (inclòs avui) sense importar el nombre màxim ni el mínim, en format PHP serialitzat
https://api.idescat.cat/indicadors/v1/dades.php?p=tt/3;max/0;min/0
Ex. 5: Tots els indicadors existents sense importar el temps transcorregut, en format XML
https://api.idescat.cat/indicadors/v1/dades.xml?p=tt/0;max/0;min/0

Atenció: El temps de resposta d'aquesta petició pot ser significatiu. S'aconsella dimensionar les peticions a les necessitats reals d'informació. En cap cas s'han de sol·licitar tots els indicadors sense mantenir algun tipus de caché en la màquina sol·licitant.

1.2.2 Operació nodes

Retorna la llista d'indicadors disponibles, amb el seu identificador i una descripció, agrupats en apartats i subapartats. El paràmetre i permet filtrar els apartats que es mostren.

  • i: llista dels identificadors (separats per comes) dels apartats dels quals es retornarà informació. Si no s'especifica, es mostraran tots els apartats.

Per conèixer els identificadors dels apartats disponibles actualment, utilitzeu l'operació nodes sense especificar i.

Ex. 6: Arbre de tots els indicadors disponibles, en format JSON amb funció de devolució ("func")
https://api.idescat.cat/indicadors/v1/nodes.json?callback=func
Ex. 7: Arbre dels indicadors disponibles de l'apartat de Conjuntura (0), en format XML
https://api.idescat.cat/indicadors/v1/nodes.xml?p=i/0

2. Resposta

Per conèixer els codis de resposta HTTP retornats i els formats suportats per qualsevol servei, consulteu l'apartat 2 de les APIs de l'Idescat.

2.1 Estructura dels resultats

2.1.1 L'element arrel indicadors

L'element arrel (indicadors) inclou els següents atributs:

  • version: versió del servei.
  • lang: idioma general del document. Si el valor d'algun element textual no utilitza aquest idioma tindrà el seu propi atribut lang. Els valors acceptats en l'actualitat són ca (valor per defecte), es i en.
  • o: operació sol·licitada.
  • p: valors assignats als paràmetres específics, si n'hi ha.
  • n: nombre d'indicadors o nodes finals amb informació que s'han inclòs en el document. Aquest nombre no coincideix amb el nombre d'elements retornats quan d'algun indicador o node final no s'ha obtingut informació vàlida.
Ex. 8: Atributs de l'element arrel en una operació 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;"
>
Ex. 9: Atributs de l'element arrel en una operació nodes
<indicadors
 version="1.00"
 lang="ca"
 o="nodes"
 n="84"
 p="i=0,1"
>

2.1.2 Els elements i de l'operació dades

La informació de cada indicador s'inclou a l'element i. A més de la informació de Catalunya, podria incloure informació de comparació d'un o més àmbits geogràfics (en l'actualitat, només d'Espanya).

Ex. 10: Element i de l'operació 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 Elements generals

Els elements generals són:

  • c: concepte. Per exemple, "IPC".
  • d: descripció de l'indicador. Per exemple, "Variació interanual de l'índex de preus de consum".
  • r: referència temporal. Conté almenys un any (quatre dígits). Per exemple, "2009". L'especificació d'any pot anar seguida d'un guió. Si després del guió hi ha un nombre de dos dígits indica mes ("2009-10": octubre del 2009); si només n'hi ha un, indica trimestre ("2009-3": tercer trimestre del 2009). Altres períodes de referència s'expressen en forma d'interval (data d'inici i final separades per coma). Per exemple, "2009-01,2009-05" indica el període gener-maig del 2009. L'element r conté un atribut title que inclou la referència temporal en forma de text breu en l'idioma general lang. Per exemple: "gen/09".
  • u: aquest element s'utilitza per facilitar informació sobre les unitats de l'indicador. El seu contingut pot proporcionar un text brevíssim concatenable al valor. En l'actualitat, només s'utilitza per passar el símbol "%"; en la resta de casos està en blanc. Aquest element conté un atribut s que no està plenament desenvolupat en l'actual versió de l'API.
  • l: Enllaç amb la pàgina de l'indicador.
  • m: Enllaç amb la pàgina de la metodologia de l'indicador (a partir del 24 d'abril de 2018, els indicadors van deixar de tenir una pàgina específica sobre la seva metodologia i, com a conseqüència, aquest element va deixar de proporcionar-se).
  • t: Text descriptiu del tipus d'indicador en l'idioma general lang. L'atribut i inclou una versió codificada (c=conjuntural; e=anual).
  • dc:date: data d'actualització de l'indicador (per exemple, "2009-03-08T11:05:00+00:00"). Vegeu la Dublin Core Metadata Initiative.
2.1.2.2 Elements específics de l'àmbit geogràfic

Indicadors al dia està concebut com un servei que proporciona informació de Catalunya. Addicionalment, pot oferir la mateixa informació per a d'altres àmbits de comparació. La informació de Catalunya està continguda en els següents elements (que sempre estan presents):

  • Valors

    Els elements que contenen valors indiquen els decimals amb punt (per exemple, "10.5"). Els valors faltants s'indiquen amb "_".

    • v: valor del darrer període disponible. Aquest valor, que també es proporciona a l'element ts, s'ofereix a v per conveniència.
    • ts: sèrie temporal. Els valors de la sèrie, ordenats de més antic a més recent, van separats per comes. En general, la sèrie s'inicia en el mateix període de referència de les dades actuals però d'un any enrere. Per tant, si la periodicitat de les dades és mensual, s'inclouen 13 observacions i, si és trimestral, 5. En el cas de valors anuals, s'ofereixen fins a 5 anys (o menys si la sèrie de dades disponibles és més curta). Si no hi ha una sèrie temporal disponible, aquest element no estarà present.
  • Textos
    • s: text que expressa la font de les dades.

Si hi ha informació disponible per a d'altres àmbits geogràfics, s'inclouen en els elements vc, tsc i sc, que tenen el mateix significat que els corresponents v, ts i s. Aquests tres nous elements inclouen un atribut g que indica l'àmbit geogràfic (en aquests moments sempre és igual a "es"). Si el darrer valor de la sèrie de l'àmbit de comparació (tsc) no està disponible, vc estarà present però amb el valor "_".

Com que en aquests moments la font de les dades (tant per a Catalunya com per a Espanya) no està traduïda, quan se sol·liciti el resultat en un idioma diferent del català tant s com sc inclouran l'atribut lang igual a "ca".

2.1.3 Els elements v de l'operació nodes

Els indicadors s'agrupen en apartats i subapartats. Aquesta jerarquia s'expressa en un seguit d'elements v imbricats. Cada element disposa d'un identificador (atribut id). Els nodes finals (indicadors) contenen un text descriptiu sobre la forma de còmput (atribut desc), així com la data d'actualització de l'indicador (atribut date).

Ex. 11: Elements v de l'operació 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 Errors

Les APIs de l'Idescat utilitzen codis de resposta normalitzats per indicar si la petició ha tingut èxit o si ha fracassat. Les peticions a l'API d'Indicadors al dia poden tenir èxit, però no retornar algun dels indicadors sol·licitats, bé perquè no existeix en l'actualitat o no ha existit mai (identificador incorrecte), bé perquè l'indicador no estigui disponible temporalment (per exemple, perquè s'està revisant).

2.2.1 Operació dades

L'element i de l'indicador sense informació disposarà de l'atribut error per indicar:

  • 403: Indicador existent però no disponible temporalment. L'element c serà l'únic descendent retornat.
  • 404: Indicador inexistent en l'actualitat (identificador no vàlid). L'element c contindrà un text explicatiu de l'error en l'idioma de la petició.

Es pot saber el nombre d'indicadors dels quals s'ha retornat informació vàlida gràcies a l'atribut n de l'element indicadors.

Ex. 12: Sortida amb dos indicadors erronis dels tres sol·licitats
<?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ó nodes

L'element v d'aquells indicadors existents però no disponibles temporalment tindrà l'atribut error amb valor 403. A més, no disposarà d'atribut desc ni date.

Ex. 13: Fragment de l'arbre amb un indicador no disponible temporalment
<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. Exemples

3.1 Sortida en format JSON processada amb Javascript

La següent petició sol·licita el darrer indicador disponible en format JSON (UTF-8, en català) amb funció de devolució:

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

El seu resultat pot processar-se en Javascript per mostrar la informació bàsica associada al darrer indicador de la següent manera:

Ex. 14: Fragment HTML+JS per processar la petició del darrer indicador disponible en format JSON amb funció de devolució
<script type="text/javascript">
<!--//--><![CDATA[//><!--
function f(json) {
 var html;
 if(document.getElementById){
 document.getElementById("darrerindicador").innerHTML="Carregant...";
 if (json) {
 if(typeof(json) == "object" && typeof(json.indicadors) == "object" && json.indicadors.n==1){
 html =
 "<ul><li><strong>Concepte:<\/strong> "+ json.indicadors.i.c + "<\/li>"+
 "<li><strong>Data de referència:<\/strong> "+ json.indicadors.i.r.title + "<\/li>"+
 "<li><strong>Valor:<\/strong> " +
 json.indicadors.i.v.replace(".",",") + json.indicadors.i.u.s + "<\/li>"+
 "<li><strong>Significat:<\/strong> " + json.indicadors.i.d + "<\/li>" +
 "<li><strong>Resultats:<\/strong> <a href=\""+json.indicadors.i.l.replace(/&/g,"&amp;")+"\">" +
 json.indicadors.i.l.replace(/&/g,"&amp;") + "<\/a><\/li>" +
 "<li><strong>Metodologia:<\/strong> <a href=\""+json.indicadors.i.m.replace(/&/g,"&amp;")+"\">" +
 json.indicadors.i.m.replace(/&/g,"&amp;") + "<\/a><\/li>" +
 "<li><strong>Data d'actualització:<\/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>Font:<\/strong> "+ json.indicadors.i.s + "<\/li><\/ul>"
 ;
 }else{
 html = "El servei no ha retornat la informació sol·licitada.";
 }
 }else{
 html = "El servei no està disponible en aquests moments.";
 }
 document.getElementById("darrerindicador").innerHTML=html;
 }
}
//--><!]]>
</script>

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

<script type="text/javascript"
 src="//api.idescat.cat/indicadors/v1/dades.json?p=min/1;max/1&amp;callback=f">
</script>
Ex. 15: Resultat: informació del darrer indicador actualitzat

3.2 Sortida en format XML processada amb XSLT

La següent petició sol·licita els darrers 6 (valor per defecte) indicadors en format XML:

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

Aquest resultat pot transformar-se emprant un document XSLT per obtenir un fragment HTML inserible en una pàgina web. El següent exemple mostra un document XSLT que genera una taula similar a la de la pàgina principal de l'Idescat a partir de la informació facilitada a la petició anterior.

Ex. 16: XSLT per generar una taula dels darrers indicadors tenint en compte l'idioma del document XML de referència
<?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>

(Per simplificar, en aquest document XSLT s'ha inclòs la generació de codi Javascript i CSS enmig del codi HTML: normalment però aquesta informació s'especificaria en fitxers a part, ja que no depèn del resultat de la petició.)

3.3 Sortida en format PHP serialitzat processada amb PHP

3.3.1 Operació dades

Les APIs de l'Idescat poden combinar-se amb altres APIs per crear un servei nou (en la terminologia anglosaxona, mashup). El següent exemple il·lustra aquesta possibilitat: utilitza l'API d'Indicadors al dia per obtenir informació actualitzada d'exportacions (i=0801) i importacions (i=0802) de Catalunya i l'API de Google Chart per representar gràficament les dades.

Ex. 17: Resultat: gràfics d'evolució de les exportacions i importacions a Catalunya

En l'exemple, la informació se sol·licita en format PHP serialitzat i es processa amb PHP. La pàgina està codificada en ISO-8859-1 i fa servir la funció indicadors() que admet una llista d'identificadors ("0801,0802": exportacions i importacions).

Ex. 18: Contenidor HTML amb invocació a la funció 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="ca" lang="ca">
 <head>
  <title>Exemple d'ús de l'API d'Indicadors al dia en PHP</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="ca" />
  <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ó indicadors() obté les dades de l'Idescat i les passa a la funció graf(), que genera el codi HTML del gràfic d'acord amb l'API de Google Chart. La funció PHP unserialize() s'utilitza per convertir la informació obtinguda en un objecte.

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

 $r = file_get_contents($url);
 if ($r === false) {
  print("La petició ha fallat.");
  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 resposta no és correcta.");
  return;
 }
}

La funció graf() pren com a argument l'objecte amb la informació sol·licitada i la processa per generar el codi HTML amb el gràfic de Google Chart.

Atès que en l'exemple la pàgina HTML és ISO-8859-1 i que el format PHP serialitzat retorna sempre el resultat codificat com a UTF-8, caldrà convertir alguns literals amb la funció PHP utf8_decode().

La petició podria contenir un identificador d'indicador incorrecte. O l'indicador podria no estar disponible temporalment. La funció graf() detecta aquestes situacions quan apareix un atribut error dins de l'element i i genera un missatge informatiu.

Ex. 20: Funció 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.": Falten valors a la sèrie</div>.");
 }
}
Ex. 21: Codi de l'exemple PHP complet
<?php
 function indicador($id){
  $url="https://api.idescat.cat/indicadors/v1/dades.php?i=".$id;

  $r = file_get_contents($url);
  if ($r === false) {
   print("La petició ha fallat.");
   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 resposta no és 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.": Falten valors a la sèrie</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="ca" lang="ca">
 <head>
  <title>Exemple d'ús de l'API d'Indicadors al dia en PHP</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Language" content="ca" />
  <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ó nodes

El següent exemple mostra com processar la informació de l'arbre dels indicadors al dia.

Ex. 22: Fragment de les funcions PHP que construeixen la taula d'indicadors
<?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ó</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 temporalment";
    }
    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 resposta no és correcta.</p>");
  }
 }else{
   print("<p>Error: La petició ha fallat.</p>");
 }
?>
Ex. 23: Apartats, subapartats i indicadors i els seus identificadors

Sou aquí: