InmoDir

Información para desarrolladores

Ejemplos con JSON

Ejemplos prácticos mediante JSON: Información de un anuncio

  1. Introducción
  2. Conexión remota al servidor de InmoDir
  3. Parámetros de datos
  4. Parámetros: Código único del anuncio
  5. Comprendiendo el resultado
  6. Resultado: Separar los valores del anuncio obtenido
  7. Sugerencias
  8. Ejemplos de conexión remota
  9. Ejemplos de conexión remota: cURL
  10. Ejemplos de conexión remota: file_get_contents()
  11. Ejemplos de conexión remota: fopen()
  12. Resultado final

Introducción

Luego de saber cómo obtener una lista de anuncios y que aparezcan en la página web de la inmobiliaria de nuestro cliente, el navegante seguramente hará 'clic' en algún anuncio para elegir verlo en detalle. Esto quiere decir que podemos hacer que en una nueva página aparezcan los datos del anuncio seleccionado, sea éste un anuncio de alquiler o de venta.

Vamos a explicar aqui cómo obtener la información de un anuncio generado en InmoDir para poder mostrar en la página web de nuestro cliente.

Conexión remota al servidor de InmoDir

La URL a utilizar para obtener la información del anuncio será la siguiente: http://es.inmodir.com/lab/json/adsdata/, que deberá llevar los dos parámetros que identificarán a la inmobiliaria y al anuncio.

http://es.inmodir.com/lab/json/adsdata/?icode=12345678901234567890123456789012&acode=12349874563217531596548521346798

Parámetros de datos

Para obtener la información de un anuncio, primero hay que identificarlo, y esto se hará con un código que es único por cada anuncio que, de la misma forma que se identifica a la inmobiliaria con un código único icode, se utilizará un código para el anuncio: acode.

Parámetros: Código único del anuncio

En el ejemplo se indican los dos valores con unos números inexistentes, pero en el caso real, el primer parámetro icode será el código único de la inmobiliaria, y el segundo parámetro, la variable acode se obtiene, por ejemplo, de la lista de anuncios tal como se explicó en el capítulo anterior.

Comprendiendo el resultado

Al final de este capítulo daremos ejemlos de tres maneras diferentes para que el sitio web de la inmobiliaria que estamos desarrollando se conecte de forma remota con la base de datos de InmoDir a la URL que se utiliza para hacer correr este script (indicada en el inicio de este capítulo). Ahora damos por sentado que esa conexión se establece y obtenemos lo que se muestra a continuación a modo de ejemplo.

Lanzando un script con la URL de ejemplo, como resultado se obtendrá una página web con el siguiente contenido:

{
"optnumber":3,
"opterror":"",
"optdata":
 {
  "ad_opertype":1,
  "ad_propertype":3,
  "ad_pictures":3,
  "ad_reference":"21044",
  "ad_map":0,
  "ad_rooms":1,
  "ad_wc":1,
  "ad_garage":1,
  "ad_storage":1,
  "ad_balcony":1,
  "ad_airconditioning":1,
  "ad_centralheating":1,
  "ad_pool":1,
  "ad_areas":1,
  "ad_floor":0,
  "ad_elevator":0,
  "ad_maplatitude":"39.47097320059302",
  "ad_maplongitude":"-0.384521484375",
  "ad_innersurface":100,
  "ad_outersurface":25,
  "ad_totalsurface":125,
  "ad_price":"500.00",
  "ad_paymentfrequency":4,
  "ad_monthlyprice":"500.00",
  "ad_published":"201905231157",
  "ad_neighborhood":"",
  "ad_city":"Paterna",
  "ad_state":"Valencia",
  "ad_energylabel":"b",
  "ad_defaultpic":"http://arcl1.inmodir.local/annpics/1054139129432523478828.jpg",
  "ad_introduction":"Monoambiente en alquiler 1 habitación 500,00€",
  "ad_description":"Monoambiente en alquiler con 1 habitación y 1 baño. 500,00€. Inmueble de 125 metros cuadrados de superficie. Con piscina. Con zonas comunes. Con aire acondicionado. Con calefacción central."
 }
}

A simple vista observamos al comienzo tres variables: optnumber, opterror y optdata.

La primera variable, optnumber, indica la cantidad de registros encontrados, en este caso debe ser siempre: 1, es decir, un anuncio encontrado. También podría ser 0 (el número cero) si no hubiese encontrado registros ó -1 (menos uno) si se hubiese producido un error.

La segunda variable, opterror, aparecerá sin valor (vacía) o con un número si se hubiese producido un error. Hay información sobre los posibles errores en la lista de códigos de errror por si se desea personalizar el texto del error para cada caso.

Por último la tercera variable, optdata, que será un array con los datos necesarios, en este caso con la información del anuncio. Los contenidos estarán divididos en llaves {} donde habrá índices y valores para cada dato.

ad_opertype Tipo de operación (1:alquiler, 2:venta)
ad_propertype Tipo de inmueble (1:casa/chalet, 2:monoambiente, 3:piso, etc.)
ad_pictures Cantidad de fotos del anuncio
ad_reference Código del anuncio en InmoDir
ad_map Si tiene mapa en Google maps (0:no tiene, 1:si tiene)
ad_rooms Cantidad de habitaciones
ad_wc Cantidad de baños
ad_garage Propiedad tiene garaje (0:no, 1:si)
ad_storage Propiedad tiene trastero (0:no, 1:si)
ad_balcony Propiedad tiene terraza/balcón (0:no, 1:si)
ad_airconditioning Propiedad tiene aire acondicionado (0:no, 1:si)
ad_centralheating Propiedad tiene calefacción central (0:no, 1:si)
ad_pool Propiedad tiene piscina (0:no, 1:si)
ad_areas Propiedad tiene zonas comunes (0:no, 1:si)
ad_floor Planta del inmueble (0:Planta baja, 1,2,3,etc (número de planta))
ad_elevator Propiedad tiene ascensor (0:No tiene, 1,2,3,etc (número de ascensores))
ad_maplatitude Coordenadas google maps - Latitud (0:Sin indicar)
ad_maplongitude Coordenadas google maps - Longitud (0:Sin indicar)
ad_innersurface Superficie interior de la propiedad
ad_outersurface Superficie exterior de la propiedad
ad_totalsurface Superficie total de la propiedad
ad_price Precio (precio de venta o de alquiler)
ad_paymentfrequency Tipo de precio (1:diario, 2:semanal, 3:quincenal, 4:mensual) Sólo para alquileres
ad_monthlyprice Precio total mensual (sólo para alquileres y cuando no es mensual)
ad_published Fecha de publicación formato AAAAMMDDhhmm (Año,mes,día,horas,minutos)
ad_neighborhood Zona/Bario/Cercanía del inmueble (Si es '0' es porque no se ha indicado)
ad_city Ciudad/Localidad/Cantón del inmueble
ad_state Estado/Provincia del inmueble
ad_energylabel Eficiencia energética de la letra A a la lentra G (si es que tiene, sinó el valor será '0')
ad_defaultpic URL Foto por defecto (si es que tiene fotos, sinó el valor será '0')
ad_introduction Texto resumido
ad_description Texto ampliado

Resultado: Decodificar el resultado obtenido

Ya que la forma en que aparece la información en este método está pensada para ser empleada mediante JSON, utilizaremos la función json_decode() y así convertir el string codificado en JSON en una variable de PHP.

Tal como se indicó antes, al final de este capítulo se darán tres ejemplos para obtener de manera diferente esta información, la cual quedará guardada en una variable a la que llamaremos: $inmodata.

En el siguiente ejemplo nos aseguramos que la variable $inmodata ha sido definida y que es diferente de 'nada', si es así procederemos a lanzar la función json_decode() convirtiendo su contenido en las tres variables PHP necesarias para trabajar: $optnumber, $opterror y $optdata.

<?php
if (isset($inmodata) && $inmodata!="")
{
 $inmodata_array = json_decode(trim($inmodata), true); // Decodificamos.
 echo"<br />Registros: ".$inmodata_array['optnumber']; // Cantidad de anuncios, que deberá ser '1'.
 echo"<br />Error: ".$inmodata_array['opterror']; // Codigo de error (si hay).
 echo"<br />Contenido: ".$inmodata_array['optdata']; // Array de datos del anuncio.
}//fin caso hay valor
?>

Y para obtener los datos del anuncio, podemos simplemente utilizar los índices del array que representa la variable optdata

<?php
if (isset($inmodata) && $inmodata!="")
{
 $inmodata_array = json_decode(trim($inmodata), true); // Decodificamos.
 echo"<br />Registros: ".$inmodata_array['optnumber']; // Cantidad de anuncios, que deberá ser '1'.
 echo"<br />Error: ".$inmodata_array['opterror']; // Codigo de error (si hay).
 /* - - - - - - Imprimir información del anuncio (inicio) - - - - - - */
 $anuncio = $inmodata_array['optdata']; // Pasamos a la var 'anuncio' para mayor comodidad.
 echo"  <br />Datos del anuncio: \n";
 echo"  <br />Tipo de operación: ".$anuncio['ad_opertype']."\n"; // Tipo de operacion.
 echo"  <br />Tipo de inmueble: ".$anuncio['ad_propertype']."\n"; // Tipo de inmueble.
 echo"  <br />Referencia: ".$anuncio['ad_reference']."\n"; // Referencia del anuncio.
 echo"  <br />Habitaciones: ".$anuncio['ad_rooms']."\n"; // Habitaciones.
 echo"  <br />Precio: ".$anuncio['ad_price']."\n"; // Precio.
 echo"  <br />Ciudad: ".$anuncio['ad_city']."\n"; // Ciudad.
 echo"  <br />Texto resumido: ".$anuncio['ad_introduction']."\n"; // Texto resumido.
 echo"  <br />Texto descriptivo: ".$anuncio['ad_description']."\n"; // Texto ampliado.
 /* - - - - - - Imprimir información del anuncio (fin) - - - - - - */
}//fin caso hay valor
?>

Sugerencias

Un tema importante es la codificación. Si bien en la primera parte del script se fuerza a interpretar la página remota con la codificación UTF-8, será bueno que dentro del código HTML también se indique esto por si algún navegador no tiene establecido esta codificación por defecto:

<!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" lang="es-es">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Título de la página</title>
  ...
 </head>
 <body>
  ...
 </body>
</html>

Y recordar siempre que al momento de guardar el fichero php, html o en el formato que sea, se recomienda elegir la opción Encoding: Unicode (UTF-8, no BOM), que suele aparecer cerca de donde va el nombre del fichero, al hacer guardar como....

Ejemplos de conexión remota

Como ya se indicó al inicio de este capítulo, para obtener hacer correr este script y obtener los resultados necesarios nos tenemos que conectar a la siguiente URL: http://es.inmodir.com/lab/json/adsdata/. Con al menos un parámetro, que será el código de la inmobiliaria, indicado aqui con la variable icode. Ahora veremos ejemplos de tres maneras diferentes para que nuestro sitio se conecte de forma remota con la base de datos de InmoDir:

Tomar en cuenta que antes de aplicar la función, se forzará a interpretar el resultado según la codificación UTF-8, esto evitará problemas con los acentos y apóstrofes. Lo único que tendrás que modificar con tus propios datos son los contenidos de las tres variables que aparecen alcomienzo de cada script, donde pone: "Valores", sobre todo las dos últimas variables $inmoscript_icode y $inmoscript_moreparams.

Conectarse y obtener los datos utilizando las librerías de cURL

<?php
/*
 * Obtener de forma remota con cURL
 * la lista de anuncios de mi cliente en InmoDir.
 */

/* Valores. */
$inmoscript_url = "http://es.inmodir.com/lab/json/adsdata/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&acode=12349874563217531596548521346798"; // aCode del anuncio.
/* Funciones. */
$ch = curl_init($inmoscript_url.$inmoscript_icode.$inmoscript_moreparams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if(curl_exec($ch) === false)
{
 echo'Curl error: '.curl_error($ch);
}
 else
{
 curl_setopt($ch, CURLOPT_URL, $inmoscript_url.$inmoscript_icode.$inmoscript_moreparams);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
 $inmodata = curl_exec($ch); // Ejecutar  
 curl_close($ch); // Cerrar  
 /* Imprimimos para verificar. */
 echo$inmodata;
}
?>

Conectarse y obtener los datos utilizando la función file_get_contents()

<?php
/*
 * Obtener de forma remota con la función file_get_contents
 * la lista de anuncios de mi cliente en InmoDir.
 */

/* Valores. */
$inmoscript_url = "http://es.inmodir.com/lab/json/adsdata/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&acode=12349874563217531596548521346798"; // aCode del anuncio.
/* Funciones. */
$opts = array(
  'http'=>array(
   'method'=>"GET",
   'header'=>implode("\r\n", array('Content-type: text/plain; charset=utf-8'))
  )
);
$context = stream_context_create($opts);
$inmodata = file_get_contents($inmoscript_url.$inmoscript_icode.$inmoscript_moreparams,false, $context);  
/* Imprimimos para verificar. */
echo$inmodata;
?>

Conectarse y obtener los datos utilizando la función fopen()

<?php
/*
 * Obtener de forma remota con fopen
 * la lista de anuncios de mi cliente en InmoDir.
 */

/* Valores. */
$inmoscript_url = "http://es.inmodir.com/lab/json/adsdata/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&acode=12349874563217531596548521346798"; // aCode del anuncio.
/* Funciones. */
$opts = array(
  'http'=>array(
   'method'=>"GET",
   'header'=>implode("\r\n", array('Content-type: text/plain; charset=utf-8'))
  )
);
$context = stream_context_create($opts);
$inmodata = fopen($inmoscript_url.$inmoscript_icode.$inmoscript_moreparams, "r", false, $context);
$inmodata = stream_get_contents($inmodata);
/* Imprimimos para verificar. */
echo$inmodata;
?>

Resultado final

Como notarás, en los tres métodos de conexión, las funciones ya están establecidas, simplemente puedes hacer copiar & pegar. Como ya se comentó antes, lo único que deberás modificar son las tres variables que corresponden a los datos específicos, donde se indica mediante el comentario Valores, las variables son: $inmoscript_url, $inmoscript_icode y $inmoscript_moreparams.

Recuerda que al probarlo es muy probable que algunos caracteres y apóstrofes se vean un poco "raros" a pesar de codificarlo en UTF-8. Con el siguiente código php que genera un código html puedes imprimir el resultado, el siguiente código podrías colocarlo a continuación de algunos de los tres scripts anteriores, el que hayas utilizado, reemplazando el comentario que decía: "Imprimimos para verificar...", simplemente haz copiar & pegar:

<?php
/*
 * Continuación del script php que se conecta y obtiene los datos.
 * En este caso imprime el resultado generando una página web con código html.
 * Esto iría en reemplazo de donde pone 'Imprimimos para verificar.'
 */

echo"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
echo"<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"es-es\">\n";
echo" <head>\n";
echo"  <title>Prueba función adsdata de InmoDir</title>\n";
echo"  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"; // Importante!
echo" </head>\n";
echo" <body>\n";
if (isset($inmodata) && $inmodata!="")
{
 $inmodata_array = json_decode(trim($inmodata), true); // Decodificamos.
 /* - - - - - - Imprimir información del anuncio (inicio) - - - - - - */
 $anuncio = $inmodata_array['optdata']; // Pasamos a la var 'anuncio' para mayor comodidad.
 echo"  <br />Datos del anuncio: \n";
 echo"  <br />Tipo de operación: ".$anuncio['ad_opertype']."\n"; // Tipo de operacion.
 echo"  <br />Tipo de inmueble: ".$anuncio['ad_propertype']."\n"; // Tipo de inmueble.
 echo"  <br />Referencia: ".$anuncio['ad_reference']."\n"; // Referencia del anuncio.
 echo"  <br />Habitaciones: ".$anuncio['ad_rooms']."\n"; // Habitaciones.
 echo"  <br />Precio: ".$anuncio['ad_price']."\n"; // Precio.
 echo"  <br />Ciudad: ".$anuncio['ad_city']."\n"; // Ciudad.
 echo"  <br />Texto resumido: ".$anuncio['ad_introduction']."\n"; // Texto resumido.
 echo"  <br />Texto descriptivo: ".$anuncio['ad_description']."\n"; // Texto ampliado.
 /* - - - - - - Imprimir información del anuncio (fin) - - - - - - */
}//fin caso hay valor
echo" </body>\n";
echo"</html>";
?>