Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 34

Discussione: [PHP] SimpleXMLElement ... più file XML

  1. #1
    Guest

    Wink [PHP] SimpleXMLElement ... più file XML

    Ciao a tutti, sapete dirmi un modo per inserire più di un file .xml (per rss in questo caso) con SimpleXMLElement?
    Io di solito uso questa sintassi:
    Codice PHP:
    <?
    $url
    = "http://www.sito.com/rss/"; # di solito sono tutti con .htaccess o altro (vedi wp)
    $rss = new SimpleXMLElement($url,NULL,TRUE);
    echo
    "<i>".$rss->channel->title."</i>;

    foreach(
    $rss->channel->item as $item) {
    echo
    $item->title."<hr/>";
    }
    ?>
    Ora, io invece vorrei che fossero più di uno di $url...ma come faccio a far gestire più file xml a SimpleXMLElement?? Conoscete qualche metodo? Ho pensato agli array, ma non saprei come metterli...grazie mille. Ciao Davide! ^^"

  2. #2
    Guest

  3. #3
    Guest

    Predefinito

    Sisi, avevo visto quel post...però forse non è quello che cerco io. Mi spiego meglio.
    Io vorrei concatenare 3 file xml (pippo,minnie,pluto). Ora io richiamando ad esempio:
    Codice PHP:
    echo $item->date."<hr />";
    Dovrei visualizzare tutte le date contenute e ordinate in pippo,minnie,pluto.
    Spero di essermi fatto capire! XD
    In alternativa...come potrei adattare quella funzione sopra citata?? ^^"
    Grazie mille!! <3

  4. #4
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Ti crei un array dei file e con un loop assegni la variabile.
    Ad esempio:
    Codice PHP:
    $files = array("file.xml", "file2.xml", "file3.xml");
    $lista = null; // elementi concatenati

    foreach($files as $file) {
    $rss = new SimpleXMLElement($file,NULL,TRUE);

    foreach(
    $rss->channel->item as $item) {
    $lista .= $item->title."<hr/>";
    }
    }

    echo
    $lista;
    Saluti!

  5. #5
    Guest

    Predefinito

    Ok, ora funziona. Ma come faccio ad ordinare i feed per data? Ho provato con sort($item->pubDate) ma non funziona...soluzioni?? Grazie mille!! <3

  6. #6
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    In che formato è la data?
    Comunque devi crearti un array che abbia come indice la data poi se possibile con ksort ordinare l'array.

    Saluti!

  7. #7
    Guest

    Predefinito

    Per la data uso questo:
    Codice PHP:
    date("d/m/Y - H.i.s",strtotime($item->pubDate))
    Grazie mille!! XD

  8. #8
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Codice PHP:
    $files = array("file.xml", "file2.xml", "file3.xml");
    $feeds = array();
    $lista = null;

    foreach(
    $files as $file) {
    $rss = new SimpleXMLElement($file,NULL,TRUE);

    foreach(
    $rss->channel->item as $item) {
    $data = (int) date("U", strtotime($item->pubDate));
    $feeds[$data] = $item;
    }
    }

    ksort($feeds);

    $feeds = array_reverse($feeds);

    foreach(
    $feeds as $item) {
    $lista .= $item->title . "<hr />";
    }
    Non so se funziona. Ora non ho tempo per provare.
    Saluti!

  9. #9
    Guest

    Predefinito

    Grazie mille!! <3 ...e se io vorrei limitare i feeds fino ad una certa data come dovrei fare? XD
    Grazie in anticipo

  10. #10
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Codice PHP:
    $files = array("file.xml", "file2.xml", "file3.xml");
    $feeds = array();
    $lista = null;

    foreach(
    $files as $file) {
    $rss = new SimpleXMLElement($file,NULL,TRUE);

    foreach(
    $rss->channel->item as $item) {
    $data = (int) date("U", strtotime($item->pubDate));
    $feeds[$data] = $item;
    }
    }

    ksort($feeds);

    $feeds = array_reverse($feeds);

    foreach(
    $feeds as $time => $item) {
    $data = date("dmy", intval($time));
    if(
    $data > "081109") {
    $lista .= $item->title . "<hr />";
    }
    }
    In pratica ottengo il giorno mese e anno e faccio il controllo.

    Saluti!

  11. #11
    Guest

    Predefinito

    Ho provato con il tuo codice ma non funziona! =(
    Mi mostra sempre tutti i feeds...
    Codice PHP:
    if((date("dmy", intval($time))) < "081109") {
    Comunque, io vorrei che mostrasse solo i feeds degli ultimi 3 giorni ad esempio! XD

  12. #12
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Allora bisogna cambiare metodo.
    Prova con:
    Codice PHP:
    if($time < (time() - (86400 * 3))) {
    Non sono sicuro che funzioni, non sono esperto con le date !
    Saluti!

  13. #13
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Citazione Originalmente inviato da mycarlo Visualizza messaggio
    Allora bisogna cambiare metodo.
    Prova con:
    Codice PHP:
    if($time < (time() - (86400 * 3))) {
    Non sono sicuro che funzioni, non sono esperto con le date !
    Saluti!
    Non dovrebbe essere maggiore la condizione?
    Cioè:
    Codice PHP:
    if($time > (time() - 86400 * 3))

  14. #14
    Guest

    Predefinito

    Mmm...non funziona ancora perché si dovrebbe fermare a 5 novembre 2009 invece visualizza fino al 18 ottobre 2009! XD

  15. #15
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Ma $time come è formato?
    Tu devi fare una cosa del genere:
    Codice PHP:
    $time = mktime($h, $min, $sec, $m, $d, $y);
    if(
    $time > (time() - 86400 * 3)){
    }

  16. #16
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Ma $time è già il timestamp !

    Saluti!

  17. #17
    Guest

    Predefinito

    Allora, per chiarezza $time mi mostra questo:
    01234567891011121314151617181920212223242526272829 30313233343536373839404142434445464748495051525354
    Invece $data mostra questo (esempio) che ad ogni singolo feeds cambia la data (non <br /><i>...</i>):
    <br /><i>09/11/2009 - 12.15.33</i>
    Come dovrei procedere...magari fare qualche "trasformazione" di qualche variabile?
    Grazie mille!! xD

  18. #18
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    $time ti mostra quello perchè non lo separi (almeno uno spazio) comunque è corretto.

    Sei sicuro che così non ti funziona:

    Codice PHP:
    $files = array("file.xml", "file2.xml", "file3.xml");
    $feeds = array();
    $lista = null;

    foreach(
    $files as $file) {
    $rss = new SimpleXMLElement($file,NULL,TRUE);

    foreach(
    $rss->channel->item as $item) {
    $data = (int) date("U", strtotime($item->pubDate));
    $feeds[$data] = $item;
    }
    }

    ksort($feeds);

    $feeds = array_reverse($feeds);

    foreach(
    $feeds as $time => $item) {
    $data = date("dmy", intval($time));
    if(
    $time > (time() - 86400 * 3)){
    $lista .= $item->title . "<hr />";
    }
    }
    ??

  19. #19
    Guest

    Predefinito

    Assolutamente no, mostra pagina bianca! XD
    Poi scusami, è obbligatorio assegnare date("dmy", intval($time)) a $data?
    Perché io già l'ho usata, e nel codice da te postato nell'if non è presente quindi mi sembra inutile! XD

    Edit: con il tuo codice, assegnando a quel valore $data mi dice questo:
    Warning: SimpleXMLElement::__construct(http://feed.sito.com) [simplexmlelement.--construct]: failed to open stream: HTTP request failed! in home.php on line 65
    Codice PHP:
    $rss = new SimpleXMLElement($file,NULL,TRUE); # linea 65
    Ultima modifica di sIM : 09-11-2009 alle ore 17.15.59

  20. #20
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Non è obbligatorio, ho soltanto preso lo script di sopra, ho dimenticato di toglierla piccola svista , prova a rimuoverla.

    Saluti!

  21. #21
    Guest

    Predefinito

    Ehm...non ho capito...cosa devo fare? Io nello script noto che alla 65 c'è $file che invece è $files

  22. #22
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Ma a SimpleXMLElement passi file che risiedono nel tuo server o passi URL?

  23. #23
    Guest

    Predefinito

    Passo degli url, anche perché sono feeds! ^^"
    Comunque, se volevi sapere se venivano prelevati...vengono prelevati correttamente!! <3
    Grazie mille! **"

  24. #24
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

  25. #25
    Guest

    Predefinito

    Ma ha sempre funzionato vedi....tornando al problema della data...come risolvo? XD
    I feeds sono sempre tutti e mi si visualizza pagina bianca! >___<
    Codice PHP:
    $siti[] = "http://feeds.feedburner.com/nomes?format=xml";
    $siti[] = "http://url2.com/wordpress/feeds/2.0/categoria/";
    $siti[] = "http://url3.com/feeds/categoria.xml";

    $lista = ""; // elementi concatenati
    $feeds = array();

    foreach(
    $siti as $file) {
    $rss = new SimpleXMLElement($file,NULL,TRUE);

    foreach(
    $rss->channel->item as $item) {
    $data = (int) date("U", strtotime($item->pubDate));
    $feeds[$data] = $item;
    }
    }

    ksort($feeds);
    $feeds = array_reverse($feeds);

    foreach(
    $feeds as $time => $item) {
    $datas = date("dmy", intval($time));
    $titolo = utf8_decode($item->title);
    $link = $item->link;
    $testo = $item->description;

    $data = "<br /><i>".date("d/m/Y - H.i.s",strtotime($item->pubDate))."</i>";


    #echo $time;
    if($time > (time() - 86400 * 3)){

    $lista .= $item->title."<br />";
    }
    }
    echo
    $lista;

  26. #26
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Citazione Originalmente inviato da sIM
    $feeds = array_reverse($feeds);
    Devi aggiungere true:
    Codice PHP:
    $feeds = array_reverse($feeds, true);

  27. #27
    Guest

    Predefinito

    Grazie mille ora funziona... ora sto usando le regex per togliere le immagini sia con i linsk che senza links. Cioè se c'è <img con <a o senza deve essere tolto da PHP! ^^"
    Ma non funziona! =(
    Codice PHP:
    $testo = ereg_replace("/\<a(.+)\>\<img(.+)\>\<\/a\>\/","",$testo);
    Grazie mille....

  28. #28
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Utilizza strip_tags() così:
    Codice PHP:
    $testo = strip_tags($testo);

  29. #29
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Ma non devi usare ereg_replace hai usato la sintassi delle pcre quindi usa preg_replace.

    Saluti!

  30. #30
    Guest

    Predefinito

    No ending delimiter '/' found in home.php on line 85
    Codice PHP:
    $testo = preg_replace("/\<a(.+)\>\<img(.+)\>\<\/a\>\/","",$testo);
    Ecco la linea 85! ^^"
    ...riguardo al consiglio che mi hai dato andrea, non mi serve quella funzione anche perché voglio solo tolta l'immagine!! <3

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •