InmoDir

Información para desarrolladores

Ejemplos con JSON

Ejemplos prácticos mediante JSON: Lista de anuncios

Obtener una lista de anuncios permite que en la página web de nuestro cliente puedan imprimirse los diferentes auncios de un determinado tipo de operación: de venta o de alquiler.

  1. Introducción
  2. Conexión remota al servidor de InmoDir
  3. Parámetros de datos
  4. Parámetros: Tipo de operación
  5. Parámetros: Tipo de inmueble
  6. Parámetros: Orden de la lista
  7. Parámetros: Paginación de resultados
  8. Comprendiendo el resultado
  9. Resultado: Separar los anuncios a partir del resultado obtenido
  10. Resultado: Separar los valores de cada línea del resultado obtenido
  11. Ejemplos de conexión remota
  12. Ejemplos de conexión remota: cURL
  13. Ejemplos de conexión remota: file_get_contents()
  14. Ejemplos de conexión remota: fopen()
  15. Resultado final

Introducción

La lista de anuncios que aparecerá en la página de la inmobiliaria podrá ser filtrada según el tipo de operación y según el tipo de inmueble. Puede también establecerse el orden de la lista de forma ascendente o descendente. Incluso es posible limitar los resultados de la lista en una determinada cantidad máxima de registros, esto es ideal cuando la cantidad de anuncios es grande y se desea paginar los resultados, por ejemplo 5 resultados por página, ó 10 resultados por página, etcétera.

Dependiendo luego de los estilos (CSS) que se le asignen, la lista podrá aparecer en forma de texto o en forma de cuadros destacados.

Ejemplo de lista de anuncios con estilo simple:

Departamento en alquiler 2 habitaciones 1500,00€ Zona centro Departamento en alquiler 3 habitaciones 1800,00€ Departamento en alquiler 2 habitaciones 1650,00€ En la costa Departamento en alquiler 2 habitaciones 1300,00€ Departamento en alquiler 4 habitaciones 2500,00€

Ejemplo de lista de anuncios con estilo destacado, utilizando la imagen por defecto de cada anuncio:

Departamento en alquiler 2 habitaciones 1500,00€ Zona centro Departamento en alquiler 3 habitaciones 1800,00€ Departamento en alquiler 2 habitaciones 1650,00€ En la costa Departamento en alquiler 2 habitaciones 1300,00€ Departamento en alquiler 4 habitaciones 2500,00€

Es decir que el mismo script que se utilice para obtener una lista de anuncios podrá luego ser utilizado para que aparezcan en la página del cliente de una forma u otra dependiendo de los estilos (CSS) que se deseen utilizar. Por ello, la programación del lado del servidor seguramente será la misma si la utilizas para diferentes clientes (inmobiliarias) teniendo que variar solamente la programación del lado del cliente (XHTML, CSS, etc.)

Conexión remota al servidor de InmoDir

Para obtener la lista se debe tener claro qué tipos de filtros se utilizarán. El primero y principal será el del tipo de operación, que puede ser operación de alquiler u operación de venta.

La URL a utilizar para obtener una lista será la siguiente: http://es.inmodir.com/lab/json/adslist/, con al menos un parámetro. El primer parámetro será el código de la inmobiliaria, indicado aqui con la variable icode, a modo de ejemplo:

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012

Al final de este capítulo daremos ejemplos de tres maneras diferentes para que el sitio de la inmobiliaria que estemos desarrollando se conecte de forma remota con la base de datos de InmoDir.

Parámetros de datos

El parámetro principal entonces es el icode, que sirve para identificar a la inmobiliaria, pero hay tres parámetros más que sirven para específicar los datos que queremos recibir.

Parámetros: Tipo de operación

Si no se indica el tipo de operación, por defecto aparecerán los anuncios de alquiler. Si se quiere indicar, el parámetro a utilizar será con la variable opertype. Pudiendo ser opertype=1 para mostrar un listado de anuncios de alquiler o opertype=2 para mostrar el listado de los anuncios de venta.

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012&opertype=1

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012&opertype=2

Parámetros: Tipo de inmueble

Si no se indica el tipo de inmueble, por defecto aparecerán todos los anuncios de alquiler o venta (según se haya indicado con la variable explicada anteriormente). Entonces aparecerán anuncios de casas, de departamentos, de galpones, de locales, etcétera.

Si por el contrario, se quisiera filtrar unicamente anuncios de alquiler o venta de un determinado tipo de inmueble, se utilizará la variable propertype como segundo parámetro.

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012&opertype=1&propertype=3

En la URL de ejemplo, se está pidiendo ver anuncios de alquiler (opertype=1) de departamentos únicamente (propertype=3). Esta es la lista de los diferentes tipos de inmuebles:

  • propertype=1 // casas/chalets
  • propertype=2 // monoambientes
  • propertype=3 // pisos
  • propertype=4 // lofts
  • propertype=5 // áticos
  • propertype=6 // bajos/oficinas
  • propertype=7 // garajes/trasteros/almacenajes
  • propertype=8 // naves
  • propertype=9 // adosados
  • propertype=10 // terrenos/parcelas

Parámetros: Orden de la lista

Establecer el orden permite que los anuncios de la lista aparezcan en orden ascendente o descendente. Esto se hace indicando el correspondiente parámetro mediante la variable order. Pudiendo ser order=desc para mostrar un listado de anuncios en orden descendente o order=asc para mostrar el listado de los anuncios en orden ascendente. Si no se indica el orden en el que aparecerán los resultados, por defecto será descendente, es decir que los anuncios mas nuevos aparecerán primero.

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012&order=asc

Parámetros: Paginación de resultados

También es posible indicar la cantidad máxima de anuncios que van a aparecer. Incluso se puede indicar desde qué número de anuncio se debe comenzar a contar. Para esto se utiliza un parámetro con la variable limit que llevará siempre dos valores numéricos separados por un punto. El primer número indicará el punto de partida y el segundo número la cantidad máxima de resultados.

http://es.inmodir.com/lab/json/adslist/?icode=12345678901234567890123456789012&limit=0.5

Así por ejemplo si se quisiera mostrar los 5 primeros resultados unicamente, se deberá agregar: limit=0.5. Para la siguiente página indicará: limit=5.5, la siguiente será: limit=10.5. Es decir que siempre aparecerán 5 resultados por página. El límite puede ser menos o mas de 5, esto es a modo de ejemplo.

Limitar los resultados de una lista posiblemente se justifique en dos casos:

  • Para la página de inicio. Pudiendo utilizar por ejemplo ...opertype=1&limit=0.3 para mostrar unicamente las tres mas recientes propiedades en alquiler, y lo mismo con los mas recientes anuncios de venta: ...opertype=2&limit=0.3.
  • Para paginar resultados. En caso de tener muchísimos anuncios y para que no se forme una página demasiado larga. Pero para ello sería conveniente antes conocer la cantidad exacta de anuncios para así saber en cuántas páginas se deberán mostrar los resultados dependiendo de la cantidad encontrada. Por ejemplo, si la inmobiliaria posee 33 anuncios y se quisieran paginar resultados cada 5 anuncios, habrá que calcular previamente para saber que se necesitarán 7 enlaces: Página 1 con ...&limit=0.5, Página 2 con ...&limit=5.5, Página 3 con ...&limit=10.5 y así hasta la , Página 7 con ...&limit=30.5. Para conocer previamente cuántos anuncios de alquiler o venta hay, se deberá lanzar un script que se explicará sobre el final de este tutorial llamado resumen de anuncios.

Comprendiendo el resultado

Al final de este capítulo daremos ejemplos 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_acode":"12341369321044234788491392799893",
   "ad_published":"201905231157",
   "ad_paymentfrequency":4,
   "ad_price":"1200.00",
   "ad_pictures":3,
   "ad_defaultpic":"http://cles1.inmodir.com/annpics/1234136935324723478826.jpg",
   "ad_introduction":"Monoambiente en alquiler 1 habitación 1200,00€"
  },
  {
   "ad_acode":"12341369318996234788471392797843",
   "ad_published":"201905230923",
   "ad_paymentfrequency":4,
   "ad_price":"1550.00",
   "ad_pictures":0,
   "ad_defaultpic":"0",
   "ad_introduction":"Apartamento en alquiler 2 habitaciones 1550,00€"
  },
  {
   "ad_acode":"12341369318996234788471392799873",
   "ad_published":"201905241225",
   "ad_paymentfrequency":4,
   "ad_price":"1950.00",
   "ad_pictures":5,
   "ad_defaultpic":"http://cles1.inmodir.com/annpics/1234136935324753678826.jpg",
   "ad_introduction":"Adosado en alquiler 2 habitaciones 1950,00€"
  }
 ]
}

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

La primera variable, optnumber, indica la cantidad de registros encontrados, en el ejemplo: 3 anuncios. 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 lista de anuncios. Los contenidos estarán divididos en llaves {} agrupando cada anuncio donde habrá índices y valores para cada dato.

Ya que se trata de una lista resumida de anuncios, los índices y valores dentro del array de la variable optdata se compone de la siguiente manera:

ad_acode Es el código único del anuncio y servirá para identificarlo por ejemplo al mostrarlo en un enlace para verlo en detalle.
ad_published Es la fecha de publicación del anuncio en formato AAAAMMDDHHMM
ad_paymentfrequency Tipo de precio (1:diario, 2:semanal, 3:quincenal, 4:mensual) Sólo para alquileres
ad_price Precio (precio de venta o de alquiler)
ad_pictures Cantidad de fotos del anuncio
ad_defaultpic URL Foto por defecto (si es que tiene fotos, sinó el valor será '0')
ad_introduction Texto resumido

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.
 echo"<br />Error: ".$inmodata_array['opterror']; // Codigo de error (si hay).
 echo"<br />Contenido: ".$inmodata_array['optdata']; // Array de anuncios.
}//fin caso hay valor
?>

Resultado: Separar los valores de cada línea del resultado obtenido

Dando por sentado que ya nos hemos conectado remotamente a la base de datos de InmoDir y almacenado el resultado en la variable $inmodata. Recuerda que al final se darán ejemplos para que tu sitio web de conecte de forma remota.

En el script anterior hemos decodificado el resultado obtenido en la variable $inmodata mediante la función json_decode formando la variable $inmodata_array, obteniendo las tres valores necesarias para los datos del anuncio $inmodata_array[optnumber], $inmodata_array[opterror] y $inmodata_array[optdata]. Ahora trabajaremos con el tercer valor que posee los contenidos, en este caso: la lista de anuncios.

Lo que haremos ahora, es ampliar este script separando los valores de cada anuncio e imprimiendo algunos resultados de la lista. El script a continuación reemplaza el anterior, pues es el mismo pero ampliado:

<?php
/* - - - - - - Imprimir lista de anuncios (inicio) - - - - - - */
if (isset($inmodata) && $inmodata!="")
{
 $inmodata_array = json_decode(trim($inmodata), true); // Decodificamos.
 echo"  <div>Registros: ".$inmodata_array['optnumber']; // Cantidad de anuncios.
 echo"<br />Error: ".$inmodata_array['opterror']; // Codigo de error (si hay).
 echo"</div>\n";
 foreach($inmodata_array['optdata'] as $anuncios)
 {
  // Imprimimos el anuncio
  echo"  <div style=\"border:3px solid #ccc;width:300px;height:300px;margin:10px;padding:10px;float:left;overflow:hidden;\">";
  echo"<a href=\"veranuncio.php?acode=".$anuncios['ad_acode']."\" title=\"Ver anuncio\">".$anuncios['ad_introduction']."</a>";
  echo"<br />Fecha de publicación: ".$anuncios['ad_published'];
  echo"<br />Precio: ".$anuncios['ad_price'];
  if ($anuncios['ad_defaultpic']!="0") // Importante: En este caso el cero debe ir entre comillas
  {echo"<br /><img src=\"".$anuncios['ad_defaultpic']."\" style=\"width:250px;\" alt=\"Foto\" />";} // Imprime fotografía por defecto.
  else
  {echo"<br />Sin foto";} // O podría ser una imagen por defecto para estos casos.
  echo"</div>\n";
 }//fin foreach
}//fin caso hay valor
else{echo"No se obtuvieron datos. \n";}
/* - - - - - - Imprimir lista de anuncios (fin) - - - - - - */
/*
 * El enlace 'veranuncio.php' es a modo de ejemplo,
 * allí deberás colocar el nombre de la página
 * o directorio que mostrará el anuncio en detalle.
 */
?>

Ejemplos de conexión remota

Como ya se indicó al inicio de este capítulo, para hacer correr este script y obtener los resultados necesarios nos tenemos que conectar a la siguiente URL: http://es.inmodir.com/lab/json/adslist/. 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 al comienzo 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/adslist/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&opertype=1&order=desc"; // Opcional.
/* 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/adslist/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&opertype=1&order=desc"; // Opcional.
/* 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/adslist/?icode="; // url del script.
$inmoscript_icode = "12345678901234567890123456789012"; // iCode de tu cliente.
$inmoscript_moreparams = "&opertype=1&order=desc"; // Opcional.
/* 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 adslist de InmoDir</title>\n";
echo"  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"; // Importante!
echo" </head>\n";
echo" <body>\n";
/* - - - - - - Imprimir lista de anuncios (inicio) - - - - - - */
if (isset($inmodata) && $inmodata!="")
{
 $inmodata_array = json_decode(trim($inmodata), true); // Decodificamos.
 echo"  <div>Registros: ".$inmodata_array['optnumber']; // Cantidad de anuncios.
 echo"<br />Error: ".$inmodata_array['opterror']; // Codigo de error (si hay).
 echo"</div>\n";
 foreach($inmodata_array['optdata'] as $anuncios)
 {
  // Imprimimos el anuncio
  echo"  <div style=\"border:3px solid #ccc;width:300px;height:300px;margin:10px;padding:10px;float:left;overflow:hidden;\">";
  echo"<a href=\"veranuncio.php?acode=".$anuncios['ad_acode']."\" title=\"Ver anuncio\">".$anuncios['ad_introduction']."</a>";
  echo"<br />Fecha de publicación: ".$anuncios['ad_published'];
  echo"<br />Precio: ".$anuncios['ad_price'];
  if ($anuncios['ad_defaultpic']!="0") // Importante: En este caso el cero debe ir entre comillas
  {echo"<br /><img src=\"".$anuncios['ad_defaultpic']."\" style=\"width:250px;\" alt=\"Foto\" />";} // Imprime fotografía por defecto.
  else
  {echo"<br />Sin foto";} // O podría ser una imagen por defecto para estos casos.
  echo"</div>\n";
 }//fin foreach
}//fin caso hay valor
else{echo"No se obtuvieron datos. \n";}
/* - - - - - - Imprimir lista de anuncios (fin) - - - - - - */
echo" </body>\n";
echo"</html>\n";
?>