Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    32

    Espressione regolare preg_match_all HELP!

    Ciao ragazzi, chiedo aiuto ai guru delle regex! Mi serve un'espressione regolare per estrapolare 4 valori dai div di una pagina html, quello che mi serve lo segno in rosso.
    La pagina è composta in questo modo:

    <codice inutile>
    <div class='gallery' id='123456'>
    <a href=''www.sito.it/gallery/contenutovariabile.html" title='Titolo gallery'>
    <div class='classe1'>
    <div class='classe2'>
    <img class='classe3' src='www.sito.it/thumb/immaginevariabile.jpg" title="Titolo Immagine"/></div>
    <span>
    <div class='icona_numero_di_foto'></div>24</span></div>
    <u>Titolo short<span>categoria</u></a>
    <div class='qualità'><div class='fr'>100%</div>Visualizazioni: 1,250</div></div>
    <codice inutile>

    Tramite un ciclo preg_match/preg_match_all devo ottenere in una array le 4 porzioni dei html, ovvero: link della gallery, titolo, src della thumbnail e numero di foto presenti nella gallery.
    La radice www.sito.it/gallery/ e www.sito.it/thumb/ ovviamente non cambia, forse può esere di aiuto!
    Questi div (gallery) si ripetono 20 volte per ogni pagina quindi il ciclo deve ripetersi per catturare tutto.
    Ovviamente prima e dopo è presente molto codice che non mi interessa.
    Qualcuno può darmi una mano?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    in attesa di risposte migliori, non potresti in ajax prendere il contenuto di queste pagine e lavorarci in javascript?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    32
    In questo senso non ho limitazioni quindi si, potrei farlo. Il mio limite è puramente tecnico, io e il java non abbiamo un rapporto felice. Sapresti farlo in j+ajax?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    ti conviene spostarti nella sezione javascript.

    Intanto ti faccio un esempio completo, che consta di due file uno che contiene il testo per cui occorre fare il parsing (che sicuramente sarà diverso da quello che hai postato) e uno che ne prende il contenuto e da in output le cose che ti interessano.

    fonte.php
    Codice PHP:
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <?php
        
    echo "
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>                
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>
            <div>
                <a class='classe4' href='www.sito.it/gallery/contenutovariabile.html' title='Titolo gallery'>
                [img]www.sito.it/thumb/immaginevariabile.jpg[/img]
            </div>"
    ;
        
    ?>
    </body>
    </html>
    index.php (richiesta ajax e parsing)
    Codice PHP:
    <html>
    <
    head>
        <
    script src='http://code.jquery.com/jquery-1.9.1.js'></script>
        <script>
            $(function(){
                $.ajax({
                    url:'fonte.php',
                    dataType: 'html'
                }).done(function(contenuto){
                    $(contenuto).find('img.classe3').each(function(i, el){
                        console.log($(el).attr('src'));
                    });
                    $(contenuto).find('a.classe4').each(function(i, el){
                        console.log($(el).attr('href'));
                    })
                });
            });
        </script>
        <title></title>
    </head>
    <body>
    </body>
    </html> 
    Lo script funziona purchè i link abbiano class 'classe4' e le immagini class 'classe3'. Dunque se puoi adattare la fonte lo script lo puoi copiare e incollare altrimenti dovresti essere più preciso nel postare la struttura della pagina che devi parsare, da quel che vedo ci sono tag annidati male o non chiusi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    32
    Grazie per la risposta, purtroppo il suo script funzionerebbe se l'html fosse come quello che hai riportato tu ma non come quello che ho dato come esempio. l'attributo class non è disponibile nel segmento "<a href", pertanto non può essere individuato.

    Avrei la necessità di recuperare e raggruppare i 4 valori segnati in rosso che poi si ripeteranno per più volte nel codice. quindi ottenere qualcosa tipo:

    #
    www.sito.it/gallery/contenutovariabile1.html
    www.sito.it/thumb/immaginevariabile1.jpg
    Titolo Immagine 1
    24
    #

    #
    www.sito.it/gallery/contenutovariabile2.html
    www.sito.it/thumb/immaginevariabile2.jpg
    Titolo Immagine 2
    16
    #

    etc. etc. etc.

    Ci sto diventando matto... help!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Sei sicuro che l'html è esattamente così?

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    32
    Si l'html è quello. Infatto dovrei trovare un modo per catturare determinati tag ALL'INTERNO di un div con una class specifica, come se facesse da contenitore. Forse con i child?

    Io devo prendere il valore del "href", del "title", del "src" dal dive con classe "gallery" e il valore testuale all'interno del div con classe "icona_numero_di_foto".

    Invece riesco solo a catturare TUTTI i src, TUTTI i href, etc etc....

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Non sono sicuro che il file fonte.php sia corretto, vedi un pò:

    fonte.php
    Codice PHP:
    <html>
    <
    head>
        <
    title></title>
    </
    head>
    <
    body>
        [
    url='altro']altro link inutile[/url]
        <
    div class='gallery' id='123456'>
            <
    a href='lnk1' title='tlnk1'>
                <
    div class="classe1">
                    <
    div class="classe2">
                        [
    img]img1[/img]
                    </
    div>
                    <
    span>
                        <
    div class='icona_numero_di_foto'></div>1
                    
    </span>
                </
    div>
            </
    a>
        </
    div>

        <
    div class='gallery' id='123457'>
            <
    a href='lnk2' title='tlnk2'>
                <
    div class="classe1">
                    <
    div class="classe2">
                        [
    img]img2[/img]
                    </
    div>
                    <
    span>
                        <
    div class='icona_numero_di_foto'></div>2
                    
    </span>
                </
    div>
            </
    a>
        </
    div>

        <
    div class='gallery' id='123458'>
            <
    a href='lnk3' title='tlnk3'>
                <
    div class="classe1">
                    <
    div class="classe2">
                        [
    img]img3[/img]
                    </
    div>
                    <
    span>
                        <
    div class='icona_numero_di_foto'></div>3
                    
    </span>
                </
    div>
            </
    a>
        </
    div>
        [
    url='altro']altro link inutile 2[/url]

    </
    body>
    </
    html
    index.php
    codice:
    <html>
    <head>
    	<script src='http://code.jquery.com/jquery-1.9.1.js'></script>
    	<script>
    		$(function(){
    			$.ajax({
    				url:'fonte.php',
    				dataType: 'html'
    			}).done(function(contenuto){
    				$(contenuto).each(function(i, el){
    					if($(el).hasClass('gallery')){
    						var lnk = $(el).find("a:first-child");
    						console.log($(lnk).attr('href'));
    						var img = $(lnk).find('img.classe3');
    						console.log($(img).attr('src'));
    						console.log($(img).attr('title'));
    						var oth = $(lnk).find("div.icona_numero_di_foto");
    						console.log($.trim($(oth).parent().contents(":not(div)").text()));
    					}
    				});
    			});
    		});
    	</script>
    	<title></title>
    </head>
    <body>
    </body>
    </html>

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    32
    Esatto il codice è come lo hai riportato tu nell'ultimo esempio, appena ho un attimo faccio una prova. Non ho specificato che la pagina con l'html di riferimento viene generata in base alle keywords di una ricerca, mi spiego:
    - l'utente effettua una ricerca in un form sul mio sito.
    - le keywords venivano inviate ad una fuzione in php (quella che cercavo di fare) ed inserite - in una stringa che puntava ad un sito esterno es. (www.sitoesterno.it/search?s=key1+key2) e successivamente veniva recuperato l'html della pagina dei risultati.
    - il tutto veniva stampato in un div con ajax nella stessa pagina e senza realod.

    In sostanza si tratta di ricevere le immagini di una thumbnail gallery con relativi titolo, numero di immagini della gallery e collegamento (poi ci sarà una fase 2 dove verranno aperte sempre nella stessa pagina le gallery e la foto in grande sotto). praticamente come se si facesse una ricerca sul sito esterno ma tramite il mio.

    Pensi che a conti fatti convenga fare tutto in jquery e ajax lasciando stare il php? Effettivamente la tua soluzione (ammesso che funzioni) sembra piu ordinata e adatta allo scopo.

    Sapresti darmi due dritte anche per quanto riguarda il form di invio e l'integrazione nella stessa pagina del tuo script? Grazie in anticipo, gentilissimo!

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    se la struttura è effettivamente questa lo script funziona, consta di una manciata di righe e non grava sul server visto che fai tutto lato client, magari se qualcuno rispondesse alla domanda con la soluzione che utilizza le espressioni regolari tu stesso potresti decidere quale soluzione ti piace di più, io non sono molto pratico con le espressioni regolari per cui non mi metto a fare paragoni.

    In genere per fare queste cose il sito esterno offre delle restful api, le richieste sarebbero molto più semplici da formulare e le risposte (in json o xml) sarebbero sicuramente più semplici da analizzare e utilizzare.
    Se 'sitoesterno' non le fornisce secondo me puoi continuare tranquillamente per questa strada.

    Per inviare dei dati alla pagina lato server devi usare il parametro 'data' di $.ajax, continuo con il mio esempio

    codice:
    $(function(){
         $.ajax({
             url:'fonte.php',
    	 dataType: 'html',
             data: ({key1:'val1', key2:'val2', key3:'val3'})
             ...
    Immagino che val1, val2 ... li vuoi prendere da un form quando clicchi su di un pulsante, per un aiuto su queste cose apri una discussione nella sezione javascript. Già tutto quello che ho scritto finora ha ben poco di lato server.

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.