Visualizzazione risultati 1 fino 13 di 13

Discussione: [PHP] Prelevare news dalla home di AGI

  1. #1
    Guest

    Predefinito [PHP] Prelevare news dalla home di AGI

    Ciao a tutti, sto cercando il modo di prelevare le news direttamente dalla home page del sito AGI.it...
    Questo è il problema: con preg_match viene prelevato solo il titolo, la regex funziona solo in quel caso... nel caso del "sommario" invece no! Perché?
    Ecco il codice:
    Codice PHP:
    <?
    $agi
    = @file_get_contents("http://www.agi.it/home.php");

    preg_match("/<p id=\"sommario(.+)\">(.+)<\/p>/",$agi,$sommario);
    preg_match("/<h1 id=\"title(.+)\">(.+)<\/h1>/",$agi,$title);

    print_r($title[2]);
    ?>
    Il problema è questo: devo creare un array multiplo ossia una cosa del genere:
    Codice:
    $title[2] -> titolo
    $sommario[3]-> testo (ipotizzando che sia il numero 3)
    
    // con un ciclo (foreach?)
    $title[2][2] -> titolo
    $sommario[2][3]
    ----
    $title[3][2]
    $sommario[3][2]
    Etc... grazie mille! ^^"

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Devi usare preg_match_all e il modificatore s, in questo caso soltanto al contenuto del tag (aggiunge il carattere a capo a .)
    Codice PHP:
    preg_match_all("/<p id=\"sommario(.+?)\">(?s:(.+))<\/p>/",$agi,$sommario);
    preg_match_all("/<h1 id=\"title(.+?)\">(?s:(.+))<\/h1>/s",$agi,$title);
    P.S se vuoi saperne di più sulle asserzioni: http://www.php.net/manual/en/regexp....assertions.php
    Ultima modifica di javascripter : 06-05-2010 alle ore 17.24.40

  3. #3
    Guest

    Predefinito

    Io ho provato il tuo codice, ma non fa quello che vorrei io... vorrei realizzare questa struttura o simile:
    Array (
    [0] => Array( [title] => Titlo uno, [sommario] => Testo news uno )
    [1] => Array( [title] => notizia due, [sommario] => testo della seconda notizia )
    [2] => Array( [title] => ecco la terza, [sommario] => e qui il testo della terza notizia )
    )
    Ma non è così... ottengo un array tutto per i cavoli suoi! =(
    Codice PHP:
    <?
    $agi
    = @file_get_contents("http://www.agi.it");
    $agi = strip_tags($agi,"<p><h1>");


    preg_match_all("/<p id=\"sommario(.+?)\">(?s:(.+))<\/p>/",$agi,$notizie['sommario']);
    preg_match_all("/<h1 id=\"title(.+?)\">(?s:(.+))<\/h1>/s",$agi,$notizie['title']);

    foreach(
    $notizie as $notizia) { print_r($notizia); echo "<hr />"; }

    #print_r($notizie);
    ?>
    Grazie mille!! ^^"

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Damanda:
    Perché non ti leggi direttamente i feed Rss che fanno questo?
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da sIM Visualizza messaggio
    Io ho provato il tuo codice, ma non fa quello che vorrei io...
    Ottengo un array tutto per i cavoli suoi! =(
    Grazie mille!! ^^"
    Ma è normale, preg_match(_all) non ti restituerà mai un array associativo, e comunque non ne vedo l'utilita...

    Comunque sia puoi fare qualcosa di simile:
    Codice PHP:
    <?
    $agi
    = @file_get_contents("http://www.agi.it");
    $agi = strip_tags($agi,"<p><h1>");


    preg_match_all("/<p id=\"sommario(.+?)\">(?s:(?P<sommario>.+))<\/p>/",$agi,$notizie['sommario']);
    preg_match_all("/<h1 id=\"title(.+?)\">(?s:(?P<title>.+))<\/h1>/",$agi,$notizie['title']);
    ?>
    Ma otterrai un array così strutturato:
    Codice:
    Array
    (
        [sommario] => Array
            (
                [0] => sommario primo articolo,
                [1] => sommario secondo articolo
                etc...
            )
    
        [titolo] => Array
            (
                [0] => titolo primo articolo
                etc..
            )
    
    )
    Senza escludere che avrai comunque l'array che hai ottenuto prima con l'aggiunta di queste due chiavi associative...
    P.S. E poi ha ragione binarysun, perchè non usi i feed rss?
    Ultima modifica di javascripter : 07-05-2010 alle ore 13.54.27

  6. #6
    Guest

    Predefinito

    Riguardo agli RSS non mostrano l'intera notizia... a me servirebbero solo quelle della home ma intere!
    C'è un metodo per creare un array come voglio io? Oppure una strada... ? sapete consigliarmi?
    Grazie mille!! =)

  7. #7
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    L'unico modo che ti rimane è popolare "manualmente" l'array.
    Ultima modifica di javascripter : 07-05-2010 alle ore 14.27.11

  8. #8
    Guest

    Predefinito

    ma tu volevi fare una cosa del genere ? http://www.ebug.it/prova/prelevaagi.php

  9. #9
    Guest

    Predefinito

    Si... però mi servono solo title e sommario! =)
    Tutto il resto non mi serve! ^^"
    PS. Mi daresti il tuo codice visto che ci sei riuscito in qualche modo? xD

  10. #10
    Guest

  11. #11
    Guest

    Predefinito

    Non riesco poiché ci vuole per forza preg_match... tu come hai fatto??

  12. #12
    Guest

    Predefinito

    codice

    Codice PHP:

    <div style='font: Normal 10px Arial;'>
    <?

    // preleviamo il nostro link

    $url = "http://www.agi.it";

    $preleva = file_get_contents($url);

    // ora preleviamo il contenuto nel nostro div

    $comincio_da_qua = strpos($preleva , "<div class=\"hpArea1 \" id=\"area1\">");

    $finisco_qui = strpos($preleva , "<div class=\"boxPubliredazionale\">");

    // creiamo la variabile contenente cosa abbiamo estratto

    $news_da_www = substr($preleva,$comincio_da_qua,$finisco_qui-$comincio_da_qua+350);

    // stampiamo a video le nostre nuove news

    echo $news_da_www;

    ?>
    </div>

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da sIM Visualizza messaggio
    Non riesco poiché ci vuole per forza preg_match... tu come hai fatto??
    Io farei cosi, a me funziona....ovviamente solo in locale perche' su altervista bisogna usare la funzione cURL per leggere pagine esterne.

    Ecco come funziona lo script nel mio sito ( con cUrl) http://montegrappa.altervista.org/tt.php

    NB : a volte bisogna fare il refresh perche' visualizzi le notizie ...e non so' il motivo.

    Codice PHP:
    <?php

    $agi
    = @file_get_contents("http://www.agi.it");
    $agi = strip_tags($agi,"<p><h1>");

    preg_match_all('/<h1 id="title.*?">(.*?)<\/h1>/s',$agi,$t1);
    preg_match_all('/<p id="sommario.*?">(.*?)<\/p>/s',$agi,$n1);

    $titoli=$t1["1"];
    $notizie=$n1["1"];
    $indice=count($titoli);

    for (
    $i = 1; $i < $indice; $i++) {
    echo
    "<b>Titolo</b> : ".$titoli[$i]."<br>";
    echo
    "<b>Notizia</b> : ".$notizie[$i]."<br><br>";
    }

    ?>
    Ultima modifica di montegrappa : 08-05-2010 alle ore 15.11.27

Regole di scrittura

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