Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Base per uno spider

  1. #1

    Base per uno spider

    Ciao a tutti.

    Sto realizzando un piccolo spiderino che avrà la funzione di cercare news rss riguardanti Messina.

    Premetto che di Spider probabilmente non ne so moltissimo per ora, ma ho chiaramente intenzione di approfondire l'argomento man mano che vado avanti con il progetto.

    Intanto ho cercato di creare come base, uno scrip che funzioni indipendente dai browser...non essendo però sicuro della qualità del codice, vi posto le poche righe che ho creato, così che eventualmente possiate dirmi tutti più o meno queste parole: "Ma che hai combinato???" magari mi consiglierete voi un sistema migliore!

    script indipendente
    Codice PHP:
    function intervallo(){ //Restituisce True a intervalli di 10 secondi (solo per rallentare il processo)
      
    $s=date("s",time());
      if (
    $s==="00" OR $s==="09" OR $s==="19" OR $s==="29" OR $s==="39" OR $s==="49")
         return 
    true;
      else
         return 
    false;
    }
    set_time_limit(0);
    $num=1;
    $query="UPDATE `check` SET `val`=1;";
    $rslt mysql_query($query,$db) or die("Accesso fallito: " mysql_error() );
    $row['val']=1;
    while(
    $row['val']){
       if(
    intervallo()){
         
    $query="UPDATE `check` SET `cicli`=$num;";
         
    $rslt mysql_query($query,$db) or die("Accesso fallito: " mysql_error() );
         
    $num++;
         
    $query="SELECT `val` FROM `check` LIMIT 1";
         
    $rslt mysql_query($query,$db) or die("Accesso fallito: " mysql_error() );
         
    $row mysql_fetch_array($rslt);
         }
       } 
    Semplicissimo pannello di controllo
    Codice PHP:
    <form name="form" method="post" enctype="multipart/form-data" action="?p=stop">
    <input type="submit" value="Stop">
    </form>
    [url="spider.php"]Start[/url]
    <?php
    $dbhost 
    "localhost";
    $name "root";
    $pswd "Chiave02";
    $dbname "prova";
    $db mysql_connect($dbhost,$name,$pswd) or die("Connessione non riuscita: " mysql_error());
    mysql_select_db($dbname) or die("Selezione del database non riuscita");

         
    $query="SELECT * FROM `check` LIMIT 1";
         
    $rslt mysql_query($query,$db) or die("Accesso fallito: " mysql_error() );
         
    $row mysql_fetch_array($rslt);
         echo 
    "<h1>".$row['cicli']."</h1>";
    if (isset(
    $_GET['p']) AND $_GET['p']==="stop"){
         
    $query="UPDATE `check` SET `val`=0;";
         
    $rslt mysql_query($query,$db) or die("Accesso fallito: " mysql_error() );
         echo 
    "<h2>Ultimo ciclo.</h2>";
         }
    else if (
    $row['val']==="0")
         echo 
    "<h2>Crawler fermo.</h2>";
    ?>
    Riassumendo il codice: Ogni 10 secondi viene aggiunto 1 al valore di partenza $num=0 e salvato nel database per poter verificare visivamente (dal pannello di controllo) che anche dopo aver chiuso la pagina lo script continua a girare.

    Per avviarlo, apro lo script con il browser e quando chiudo quest'ultimo lo script continua a girare. Nel pannello di controllo infatti, ad ogni mio refresh, si visualizza il numero di cicli che lo script ha eseguito ($num salvato sul database).

    Per fermarlo, dal pannello di controllo aggiorno la riga 'val' della tabella 'check' a 0 e quindi al prossimo ciclo lo script uscirà dal while.

    Pensate che sia qualcosa di corretto, o che magari ho creato un obbrobrio? Come ho detto in materia di Crawler non me ne intendo ancora, magari dovrei fare diversamente, se si come?

    Grazie a tutti.
    Valerio

  2. #2

  3. #3
    Non sono sicuro che, alla chiusura del browser, lo script continui a girare.

    Io utilizzerei una cron tab, se sei su server linux.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    si, continua a girare, ho fatto la prova in locale quindi dovrebbe continuare anche sul server.

    Per la cron, mi sono informato e sebbene sia su server linux, non ho la cron nel pannello di controllo, quindi sono costretto ad arrangiarmi come posso! Come ti sembra il codice?

  5. #5
    Che ti dico.... formalmente il codice sembra funzionare.
    Sono però convinto che devi vedere in remoto se da problemi... ogni dieci secondi una serie di chiamate al DB, secondo me rischi di impallare il sistema.

    Non vedo poi la parte di "crawling": dove va a cercare le informazioni questo spider?
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6
    Infatti è solo la base di quello che diventerà uno spider, intanto sto provando questo discorso di far girare uno script da solo. La parte del ogni 10 secondi l'ho messa per rallentarlo in fase sperimentale, poi la toglierò.

  7. #7
    Comunque, hai pienamente raggione, funziona solo in locale! Come posso fare senza la cron?

  8. #8
    Hai già provato ad inserire
    Codice PHP:
    ignore_user_abort(true); 
    all'inizio del codice?

  9. #9
    Originariamente inviato da cubalibre810
    Hai già provato ad inserire
    Codice PHP:
    ignore_user_abort(true); 
    all'inizio del codice?
    Si, in locale funziona con e senza la ignore_user_abort, su server però evidentemente non mi permettono di reimpostare il tempo limite a infinito con la set_time_limit(0);

    Quindi mi serve una soluzione alternativa se c'è! Qualche idea?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.