El día de hoy necesito de su observación para resolver algunos puntos sobre un desarrollito que estoy haciendo para una inmobiliaria, resulta que esta empresa quiere enlazar anuncios a diferentes sitios como OLX, TROVIT, Sumavisos etc. El cual me di a la tarea de revisar la documentación de cada uno de estos sitios y mencionan lo siguiente.
Para crear o publicar anuncios masivos, requieren de un archivo feed XML con todos los anuncios que se van a publicar en el sitio de ellos, ellos requieren de una URL de XML el cual van a descargar para después pasarlos a su base de datos.
Yo realice un esquema en base a las peticiones de estos sitios y ademas de que quiero que haga mi sistema.
Quiero saber cual es la mejor forma de crear o generar estos archivos XML de manera automatica, sustraendo los datos de una tabla que me proporciona la inmobiliaria donde sus cliente registran sus casas o departamentos.
Por el momento tengo mi script que genera el XML
crearxml.php
Código PHP :
//Crear elementos $xml = new DomDocument('1.0', 'UTF-8'); $root = $xml->createElement('ADS'); $root = $xml->appendChild($root); //Primer elemento aqui donde ira un ciclo para cuando es importado $ad=$xml->createElement('AD'); $ad =$root->appendChild($ad); //ID $id=$xml->createElement('ID','<![CDATA['.$id.']]>'); $id =$ad->appendChild($id); //TITLE $title=$xml->createElement('TITLE','<![CDATA['.$title.']]>'); $title =$ad->appendChild($title); //DESCRIPTION $description = $xml->createElement('DESCRIPTION','<![CDATA['.$description.']]>'); $description =$ad->appendChild($description); //EMAIL $email=$xml->createElement('EMAIL','<![CDATA['.$email.']]>'); $email=$ad->appendChild($email); //PHONE $phone=$xml->createElement('PHONE','<![CDATA['.$phone.']]>'); $phone=$ad->appendChild($phone); //ADDRESS $address=$xml->createElement('ADDRESS','<![CDATA['.$address.']]>'); $address=$ad->appendChild($address); //ZIP_CODE $zip_code=$xml->createElement('ZIP_CODE','<![CDATA[ '.$zip_code.' ]]>'); $zip_code=$ad->appendChild($zip_code); //LOCATION_COUNTRY $location_country=$xml->createElement('LOCATION_COUNTRY','<![CDATA[ '.$country.' ]]>'); $location_country=$ad->appendChild($location_country); //LOCATION_STATE $location_state=$xml->createElement('LOCATION_STATE','<![CDATA[ '.$state.' ]]>'); $location_state=$ad->appendChild($location_state); //LOCATION_CITY $location_city=$xml->createElement('LOCATION_CITY','<![CDATA[ '.$city.' ]]>'); $location_city=$ad->appendChild($location_city); //CATEGORY $category=$xml->createElement('CATEGORY','<![CDATA[ '.$category.' ]]>'); $category=$ad->appendChild($category); /* Departamento – Casa en venta 367 Departamento – Casa en alquiler 363 Compartir departamento 301 Intercambio de Casas 567 Alquiler temporario 388 Estacionamiento 302 Terrenos 410 Oficinas – Locales 368 Locales en alquiler – en venta 415 */ //Elementos adicionales de ala categoria Viviendas - Locales $bedrooms=$xml->createElement('BEDROOMS',''.$bedrooms.''); //(# of Habitaciones) $bedrooms=$ad->appendChild($bedrooms); $batherooms=$xml->createElement('BATHROOMS',''.$batherooms.''); //(# of Baños) $batherooms=$ad->appendChild($batherooms); $pets=$xml->createElement('PETS',''.$pets.''); //(Se aceptan o no mascotas) $pets=$ad->appendChild($pets); $brokerfee=$xml->createElement('BROKERFEE',''.$brokerfee.''); //(Comisión inmobiliaria - si/no) $brokerfee=$ad->appendChild($brokerfee); $surface=$xml->createElement('SURFACE',''.$surface.''); //(Superficie/área) $surface=$ad->appendChild($surface); //Finalizamos el formato y listo para guardar $xml->formatOutput = true; //Guardar el xml como un archivo de String, es decir, poner los string en la variable $strings_xml: $strings_xml = $xml->saveXML(); //Finalmente, guardarlo en un directorio: $time=time(); //Esto permite guardarlo con diferente Nombre $xml->save('XML/XML'.$time.'.xml'); echo 'Se ha creado el XML listo para enviar';
Este script conecta a una BD para tomar los valores de una tabla
Código PHP :
include("Class/mysql.php"); $db = new MySQL(); $consulta= $db->consulta("SELECT * FROM tbl_tmpdb_xml"); $num= $db->num_rows($consulta); if ($num!=0) { //Crear elementos $xml = new DomDocument('1.0', 'UTF-8'); $root = $xml->createElement('ADS'); $root = $xml->appendChild($root); //Primer elemento aqui donde ira un ciclo para cuando es importado while ($rows = $db->fetch_array($consulta)) { $ad=$xml->createElement('AD'); $ad =$root->appendChild($ad); //ID $id=$xml->createElement('ID','<![CDATA['.$rows['id_anuncio'].']]>'); $id =$ad->appendChild($id); //TITLE $title=$xml->createElement('TITLE','<![CDATA['.$rows['title'].']]>'); $title =$ad->appendChild($title); //DESCRIPTION $description = $xml->createElement('DESCRIPTION','<![CDATA['.$rows['description'].']]>'); $description =$ad->appendChild($description); //EMAIL $email=$xml->createElement('EMAIL','<![CDATA['.$rows['email'].']]>'); $email=$ad->appendChild($email); //PHONE $phone=$xml->createElement('PHONE','<![CDATA['.$rows['phone'].']]>'); $phone=$ad->appendChild($phone); //ADDRESS $address=$xml->createElement('ADDRESS','<![CDATA['.$rows['address'].']]>'); $address=$ad->appendChild($address); //ZIP_CODE $zip_code=$xml->createElement('ZIP_CODE','<![CDATA[ '.$rows['zip_code'].' ]]>'); $zip_code=$ad->appendChild($zip_code); //LOCATION_COUNTRY $location_country=$xml->createElement('LOCATION_COUNTRY','<![CDATA[ '.$rows['country'].' ]]>'); $location_country=$ad->appendChild($location_country); //LOCATION_STATE $location_state=$xml->createElement('LOCATION_STATE','<![CDATA[ '.$rows['state'].' ]]>'); $location_state=$ad->appendChild($location_state); //LOCATION_CITY $location_city=$xml->createElement('LOCATION_CITY','<![CDATA[ '.$rows['city'].' ]]>'); $location_city=$ad->appendChild($location_city); //CATEGORY $category=$xml->createElement('CATEGORY','<![CDATA[ '.$rows['category'].' ]]>'); $category=$ad->appendChild($category); /* Departamento – Casa en venta 367 Departamento – Casa en alquiler 363 Compartir departamento 301 Intercambio de Casas 567 Alquiler temporario 388 Estacionamiento 302 Terrenos 410 Oficinas – Locales 368 Locales en alquiler – en venta 415 */ //Elementos adicionales de ala categoria Viviendas - Locales $bedrooms=$xml->createElement('BEDROOMS',''.$rows['bedrooms'].''); //(# of Habitaciones) $bedrooms=$ad->appendChild($bedrooms); $batherooms=$xml->createElement('BATHROOMS',''.$rows['batherooms'].''); //(# of Baños) $batherooms=$ad->appendChild($batherooms); $pets=$xml->createElement('PETS',''.$rows['pets'].''); //(Se aceptan o no mascotas) $pets=$ad->appendChild($pets); $brokerfee=$xml->createElement('BROKERFEE',''.$rows['brokerfee'].''); //(Comisión inmobiliaria - si/no) $brokerfee=$ad->appendChild($brokerfee); $surface=$xml->createElement('SURFACE',''.$rows['surface'].''); //(Superficie/área) $surface=$ad->appendChild($surface); } //Finalizamos el formato y listo para guardar $xml->formatOutput = true; //Guardar el xml como un archivo de String, es decir, poner los string en la variable $strings_xml: $strings_xml = $xml->saveXML(); //Finalmente, guardarlo en un directorio: $time=time(); //Esto permite guardarlo con diferente Nombre $xml->save('XML/XML'.$time.'.xml'); echo 'Se ha creado el XML listo para enviar';
como resultado me da este XML
Código XML :
<?xml version="1.0" encoding="UTF-8"?> -<ADS>-<AD><ID><![CDATA[123]]></ID><TITLE><![CDATA[Prueba de casa]]></TITLE><DESCRIPTION><![CDATA[]]></DESCRIPTION><EMAIL><![CDATA[[email protected]]]></EMAIL><PHONE><![CDATA[45869632]]></PHONE><ADDRESS><![CDATA[Av. Sucursarl bellas artes]]></ADDRESS><ZIP_CODE><![CDATA[ 64780 ]]></ZIP_CODE><LOCATION_COUNTRY><![CDATA[ Mexico ]]></LOCATION_COUNTRY><LOCATION_STATE><![CDATA[ Nuevo Leon ]]></LOCATION_STATE><LOCATION_CITY><![CDATA[ Monterrey ]]></LOCATION_CITY><CATEGORY><![CDATA[ 301 ]]></CATEGORY><BEDROOMS>3</BEDROOMS><BATHROOMS>2</BATHROOMS><PETS>no</PETS><BROKERFEE>si</BROKERFEE><SURFACE>78m</SURFACE></AD>-<AD><ID><![CDATA[449]]></ID><TITLE><![CDATA[Prueba de casa]]></TITLE><DESCRIPTION><![CDATA[]]></DESCRIPTION><EMAIL><![CDATA[[email protected]]]></EMAIL><PHONE><![CDATA[45869632]]></PHONE><ADDRESS><![CDATA[Av. Sucursarl bellas artes]]></ADDRESS><ZIP_CODE><![CDATA[ 64780 ]]></ZIP_CODE><LOCATION_COUNTRY><![CDATA[ Mexico ]]></LOCATION_COUNTRY><LOCATION_STATE><![CDATA[ Nuevo Leon ]]></LOCATION_STATE><LOCATION_CITY><![CDATA[ Monterrey ]]></LOCATION_CITY><CATEGORY><![CDATA[ 301 ]]></CATEGORY><BEDROOMS>3</BEDROOMS><BATHROOMS>2</BATHROOMS><PETS>no</PETS><BROKERFEE>si</BROKERFEE><SURFACE>78m</SURFACE></AD>-<AD><ID><![CDATA[458]]></ID><TITLE><![CDATA[Prueba de casa]]></TITLE><DESCRIPTION><![CDATA[]]></DESCRIPTION><EMAIL><![CDATA[[email protected]]]></EMAIL><PHONE><![CDATA[45869632]]></PHONE><ADDRESS><![CDATA[Av. Sucursarl bellas artes]]></ADDRESS><ZIP_CODE><![CDATA[ 64780 ]]></ZIP_CODE><LOCATION_COUNTRY><![CDATA[ Mexico ]]></LOCATION_COUNTRY><LOCATION_STATE><![CDATA[ Nuevo Leon ]]></LOCATION_STATE><LOCATION_CITY><![CDATA[ Monterrey ]]></LOCATION_CITY><CATEGORY><![CDATA[ 301 ]]></CATEGORY><BEDROOMS>3</BEDROOMS><BATHROOMS>2</BATHROOMS><PETS>no</PETS><BROKERFEE>si</BROKERFEE><SURFACE>78m</SURFACE></AD></ADS>
Este script en particular me gustaría que a los 30 feed que tome corte y me genere el archivo XML, si hay 60 que sean 2 archivos, como le puedo hacer aquí?
Importante, este script solo genera un XML especifico de OLX, para TROVIT son otros campos.
Espero me puedan alentar de como puedo mejorar y resolver este sistema.
Una vez resuelto esto se espera de que los anuncios publicados nos devuelva valores que queremos registrar en una tabla para llevar un control de logs sobre activo no activo, url situado, cuantos visitan el anuncio etc.
Nota: Otro punto que se me paso es que también necesitamos crear una tarea o cron par que se ejecute el script de manera automática ya que estos sitios solo aceptan archivo XML a cierto horario.
Gracias amigos