Creare un Indice di pagine web con PHP

ilovephp 300x218 Creare un Indice di pagine web con PHPL’altra volta mi è capitato di avere una lista di URL tipo questa:

http://www.italianwebdesign.it/voglio-propormi-a-qualche-webagency-esiste-una-lista-delle-piu-importanti-in-italia/

http://www.italianwebdesign.it/wordpress-plugin-sidebar-photoblog-per-mostrare-lanteprima-delle-vostre-gallery/

http://www.italianwebdesign.it/tutorial-illustrator-effetto-gradiente-o-blend/

http://www.italianwebdesign.it/rdfa-la-genesi-del-web-semantico/

http://www.italianwebdesign.it/come-tutelarsi-dalla-follia-dei-clienti/

Solo che contava circa 240 url.
Di questi URL dovevo creare del codice html ed ottenere questo risultato:

Voglio propormi a qualche webagency: esiste una lista delle più importanti in Italia?
WordPress plugin: sidebar photoblog per mostrare l’anteprima delle vostre gallery
Tutorial Illustrator: effetto gradiente o blend
RDFa : La genesi del web semantico
Come tutelarsi dalla follia dei clienti

Dunque avrei dovuto visionare manualmente il titolo della pagina per 247 indirizzi, copiarlo e creare l’html adeguato. Ora, siccome dovevo allenarmi per battere il mio record a Typing of the Dead e siccome il titolo della pagina lo si poteva leggere nell’url, ho deciso di fare tutto a mano, pur sapendo che PHP avrebbe potuto fare tutto per me.

Comunque Typing of the Dead non è proprio il più famoso tra i giochi, e non tutti hanno il tempo, la voglia e la pazienza per indicizzare tante pagine web (nemmeno io, di solito), e tornato a casa ho deciso di mettere a punto lo script per fare lo stesso lavoro che io avevo fatto a mano.

Lo script completo potete scaricarlo da Qui

Ma qual è la ricetta di questo script? Beh! Per prima cosa abbiamo bisogno di una lista di URL, proprio come sopra.
A questo punto prendiamo la lista e mettiamola in una variabile chiamata $url_list;.

Dobbiamo poi trasformare la lista in un Array. Un Array è, in profane parole, una variabile che contiene al suo interno altre variabili, in modo da creare un indice. Nel nostro caso l’array che verrà fuori è tipo questo:

$array_url[0] = ‘http://indirizzo1/';
$array_url[1] = ‘http://indirizzo2/';
$array_url[2] = ‘http://indirizzo3/';

Come vedete è numerato e parte da 0.
Per ottenerlo dobbiamo usare un’espressione regolare. Questa espressione regolare dirà a PHP di indicizzare una porzione di testo ogni qualvolta vengono soddisfatte determinate condizioni. Nel nostro caso la condizione è: andare d’accapo.
Dunque usiamo la funzione preg_split(); e scriviamo

$array_url = preg_split(‘/\r\n/’, $url_list);

$array_url sarà l’array, nella funzione preg_split a sinistra ci sono le condizioni da soddisfare e a destra la stringa da analizzare (nel nostro caso la lista di url nuda e cruda).

Fatto ciò abbiamo la nostra lista trasformata in un array, dunque siamo pronti per usarla a dovere in php.
Creiamo un ciclo for in modo da navigare tutto l’array:

for($x=0;$x<count($array_url); $x++){}

Questo ciclo for dice a PHP: “esegui le istruzioni che sono contenute tra parentesi graffe fintanto che la variabile $x, che come ti ho indicato inizialmente è uguale a zero, è minore del numero di indici contenuti nell’array (che otterrai con la funzione count), ed ogni volta che finisci di eseguire le istruzioni aggiungi +1 alla variabile x”.
In questo modo PHP eseguirà le istruzioni contenute tra le parentesi graffe tante volte quanti sono gli URL della lista: in questo modo andremo appunto a creare il nostro indice in html.

Passiamo alle istruzioni contenute tra parentesi graffe:

$geturl = file_get_contents($array_url[$x]);

Nella variabile $geturl; verrà salvato l’html dell’url indicato, ottenuto tramite la funzione file_get_contents();. Tra le parentesi di file_get_contents scriviamo $array_url[$x]. In pratica stiamo dicendo: raggiungi l’array nel punto definito dalla variabile $x.
A volte file_get_contents; non funziona, quindi potreste dare un’occhiata a questo workaround.

Poi scriviamo:

$title[$x] = preg_replace(“/.*<title[^>]*>|<\/title>.*/si”, “”, $geturl);

Questa funzione utilizza le espressioni regolari, tramite preg_replace();, per estrarre il tag title della pagina e salvarlo in un nuovo array chiamato $title.

Poi rifiniamo il titolo togliendo il nome del sito, nel nostro esempio stiamo navigando IWD dunque toglieremo ” Italian webdesign”. Per farlo useremo la funzione str_replace();:

$title[$x] = str_replace(“| Italian webdesign”, “”, $title[$x]);

Infine inviamo l’html al browser con la funzione echo e chiudiamo le parentesi graffe:

echo ‘<li><a href=”‘.$array_url[$x].'”>’.$title[$x].'</a></li>';
}

Questo è tutto ciò che vi serve per navigare le pagine ed estrarne il tag title. Certo, non diventerete forti a Typing of the Dead, però risparmierete molto, moltissimo tempo.

share small Creare un Indice di pagine web con PHP
Avatar of Dario Venneri

5 Comments

  • Sandro Modarelli

    2 giugno 2009, 08:52

    al posto del ciclo for è meglio usare un foreach. Per i cicli di scorrimento completo il foreach consuma meno risorse di un ciclo for:

    foreach($array_url as $url){
    $geturl = file_get_contents($url);


    }

    Inoltre sarebbe utile usare per le parti di codice il tag . Così come è scritto ora, il codice insieme al testo è davvero di difficile lettura

  • Sandro Modarelli

    2 giugno 2009, 08:53

    Esempio con tag code:


    foreach($array_url as $url){
    $geturl = file_get_contents($url);


    }

  • Avatar of Dario Venneri

    Dario Venneri

    2 giugno 2009, 15:15

    mh, effettivamente Lauryn si deve essere scordata di stilizzare i blockquote, un bel problema :D

  • Avatar of Lauryn

    Lauryn

    2 giugno 2009, 18:41

    fatto, chiedo venia. comunque puoi riprendere ad usare i tag code ora dovrebbero fungere bene ;)

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>