Comunidad de diseño web y desarrollo en internet online

Esquema XML con php como WebServices

Citar            
MensajeEscrito el 20 Mar 2013 10:59 pm
Que tal amigos,

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

Por kakashi2000

Claber

559 de clabLevel

5 tutoriales

Genero:Masculino  

Desarrollador de aplicaciones Web

chrome
Citar            
MensajeEscrito el 10 May 2013 04:01 pm
no te basta un simple limit en el query de sql?, creo que con eso deberias porder limitarlo cuanto quieras, de ahi solo generas los archivos con nombres serializados y ya estas...

Por chupepe

0 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.