Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655

    Consiglio importazione dati

    Ciao a tutti.
    Devo importare dei dati presi da xml in database.
    Teoricamente ogni tot tempo dovrei far partire l'import da crontab.
    Con simplexml_load_file() prendo i dati, li parlo e li metto a db.

    La domanda e' questa:
    Avendo una lista di sorgenti(circa 15) come fareste l'import?
    Calcolando che questi xml non sono enormi, solo 2 sono un po grandi.

    Meglio fare piu' chiamate in crontab e quindi una per url e magari richiamarle in blocchi di qualche minuto o un unico script che cicla tutte le url?

    Il mio dubbio sulla seconda è il fatto che se una di queste dovesse inchiodarsi fermerei anche le successive.

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Io preferisco usare la lib DOMDocument ..
    Cmq e' una tua scelta l'importante e' leggere corettamente l'xml

    quello che posso consigliarti e' di implementare una corretta gestione degli errori.
    Un buon modo di farla e' creare una classe importer che lanci le relative eccezioni in caso di errore.

    Lancia il parse completo in un unico cron, se le dimensioni dei files non sono troppo grandi non ci metti molto.

    quindi crei la classe con i metodi che lancino eccezzioni in caso di errore.

    nello script cron istanzi la classe e la lanci dentro i relativi try catch .

    facci esempio
    Codice PHP:
    classe importer

       attributo privato $xml 
    // contiene l'xml parsato oppure false

       /*
       Cerca, scarica e parsa il file xml e lo stipa in $this->xml
       Lancia eccezione in caso di errore
       */
       
    costruttore (url file)
       


       
    /*
       Ritorna il set di nodi di nome $loadName
       Lancia eccezione in caso di errore
       */
       
    metolo loadDataSet$nodeName ){}


       
    /*
       Scansione e conversione di un singolo nodo
       ritorna array( "field"=>"value" ) dei valori letti
       lancia eccezione in caso di errore
       */
       
    metodo nodeToData$row )


       
    /*
       Utilizza i metodi sopracitati e gestisce eventuali eccezioni
       Ritorna array( "row" => array( "field"=>"value" ) )
       lancia eccezione in caso di errore
       */
       
    metodo getData$nodeName )
       
    /*
          - controlla che esista il documento xml parsato nell'attributo della classe "xml" altrimenti => eccezione
          - [try] lancia this->loadDataSet($bodeName) [/try][catch]gestisce eccezione[/catch]
          - istanzia variabile $out = array() ;
          - 
             [try] ciclo che scorre tutti i nodi 
                Per ogni nodo : 
                   - [try] $data = this->getData[/try][catch]$data = false Oppure messaggio dell'eccezione vedi te come gestire [/catch]
                   - esegui il push dei dati nella strutura dati $out[] = $data
             [/try]
          - retiruisci $out
       */ 
    QUIndi nello script principale in cron avrai una cosa del tipo

    Codice PHP:

    try{
    $importer = new Importer(  "http://www.percorsoxml.xml" )  ;
    } catch(
    Exception $e){ /* GESTIONE ECCEZIONE */ }

    try{
    $data $importer->getData"record" ) ;

    // Conversione in sql
    $q "insert into table "
    $f "" ;
    $v "" ;
    foreach( 
    $data as $d )
    {
        if( 
    $d && is_array($d) )
        {
            foreach( 
    $d as $field=>$value )
            {
                
    //concatena 
                
    $f $field." , " 
                
    $v "'".$v."' , " ;
            }
        }
    }

    if( 
    $f && $v )
    {
        
    $f substr$f,0,strrpos($f,"") ) ;
        
    $v substr$v,0,strrpos($v,"") ) ;

        
    $q .= "($f) values($v)";

        
    // ETC ETC...

    }
    else
    /* ERRORE */ 



    } catch(
    Exception $e){ /* GESTIONE ECCEZIONE */ 

    Nel caso il metodo di conversione array->sql puoi farlo anche piu' raffinato oppure generare direttamente la stringa di insert nella funziona getData, dipende da te. CMq devi gestire bene le eccezioni e vedrai che anche in caso di 1 errore il tuo script funziona comunque semplicemente tiene traccia degli errori in un log o dove ti pare.


    Gud Lac

  3. #3
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, grazie dei consigli e dell'esempio per la classe
    Ora vedrò come sistemare il tutto

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    In bocca al lupone se serve siam qua


  5. #5
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Per info, se non error un xml non dovrebbe contenere caratteri strani ad esempio & commerciale se non encodata con la sua sintassi tipo: & a m p ; (senza spazio) a meno che non sia messo in un CDATA o sbaglio?
    Chiedo perche' dovrei fare richiesta e far sistemare questi inconvenienti dato che non credo possa io fare qualcosa a monte.

    TY

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Uhmm.... Negli attributi & non dovrebbe esistre come carattere.

    E si diciamo che se un nodo contiene testo dovrebbe essere incpasulato nel tag cdata proprio per dire al parser che sta analizzando un nodo testuale e se contiene ulteriori tags questi devono essere letti come testo.(ad esempio un nodo che contiene del codice html deve stare dentro cdata altrimenti schioppa tutto)

    Richiedi che siano rispettati gli std altrimenti devi impazzire.

    A me è capitato su un software che esportava i dati dentro attributi e esplodeva tutto perche' chi ha ftto l'exporter non ha rispettato gli standards(sono impazzito a correggere di replace tutto il file per farlo partire)... se puoi si richiedi che rispettino gli std...

    Nota : pare che se in un attributo compare & tale carattere ricodificato sia consentito.
    Fatti mettere i dati dentro i nodi e non negli attributi altrimenti scleri.

  7. #7
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    A posto, mi hanno messo un CDATA
    Grazie ancora

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    No problem , dai sei stato fortunato ... io ci ho perso 1 giornata a capire perche' falliva il parsing di quei maledetti xml e sono diventato quando ho visto perche'


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.