Non sei loggato | Registrati | Login

Codice sorgente delle infoPillole Aggiungi

News / Codice

Benvenuto! Se sei un nuovo visitatore ti consiglio di iscriverti al mio Feed RSS in modo da essere sempre aggiornato riguardo l'uscita di nuovi articoli oppure sbirciare tra i tutorials ed i progetti.
Per avere un'idea del best-content presente in questo blog puoi leggere il post intitolato "Ed ora è il momento di rilanciare alcune iniziative! (1a parte e 2a parte)".
Buona navigazione e grazie per la visita!

Ho già spiegato nel post precedente cosa sono le infoPillole e quindi ora non mi resta che condividere il codice sorgente:

  1. <?php
  2.  
  3. /* Inizio impostazioni */
  4. $numero_items=5;
  5. $url_base_wikipedia="http://it.wikipedia.org"; // url base di wikipedia senza ultimo slash
  6. $url_portale_wikipedia="http://it.wikipedia.org/wiki/Wikipedia:Progetto_Informatica/Lista_delle_voci_di_informatica"; // url da cui prelevare i links
  7. /* Fine impostazioni */
  8.  
  9. function download_and_save_wiki($mese,$url_portale_wikipedia) {
  10.  
  11.         /* Download wiki */
  12.        
  13.         ini_set('user_agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6'); // settaggio user-agent per evitare codice di errore 403 da parte di Wikipedia
  14.        
  15.         if ($wiki_content=@file_get_contents($url_portale_wikipedia)) { // preleva sorgente pagina web
  16.        
  17.                 if (preg_match_all('/<li><a href="(.*)" title="(.*)">(.*)<\/a><\/li>/im', $wiki_content, $wiki_items)) { // estrazione links
  18.                         $count_items=count($wiki_items[0]);
  19.                         for ($i=0; $i<$count_items; $i++) {
  20.                                 $wiki_item[$i]['h']=$wiki_items[1][$i]; // valore attributo href
  21.                                 $wiki_item[$i]['t']=$wiki_items[2][$i]; // valore attributo title
  22.                                 $wiki_item[$i]['n']=$wiki_items[3][$i]; // contenuto nodo
  23.                         }
  24.                 } else {
  25.                         return -1; // nessun link trovato
  26.                 }
  27.                                
  28.         /* Save wiki */
  29.        
  30.         if (!($file=fopen(TEMPLATEPATH.'/'.$mese.".txt","w"))) { // apre il file in scrittura
  31.                 return -2;
  32.         }
  33.         $file_array=serialize($wiki_item); // prepara l'array per il salvataggio
  34.         if (!(fwrite($file,$file_array))) { // scrivo l'array nel file del mese
  35.                 return -3;
  36.         }
  37.         $mese_prec=($mese==1?(12):($mese-1)); // mese precedente
  38.         @unlink($mese_prec.".txt"); // cancello il file del mese precedente
  39.         return $wiki_item; // ritorno l'array
  40.         } else {
  41.                 return -4; // errore scaricamento pagina
  42.         }
  43. }
  44.  
  45. function load_wiki($mese) {
  46.         if ($file=@file_get_contents(TEMPLATEPATH.'/'.$mese.".txt")) { // carico il contenuto del file
  47.                 return unserialize($file); // ritorno l'array
  48.         } else {
  49.                 return -1; // errore caricamento file
  50.         }
  51. }
  52.  
  53. $mese=date('n'); // rappresentazione numerica del mese corrente (da 1 a 12)
  54.  
  55. if (!file_exists(TEMPLATEPATH.'/'.$mese.".txt")) {
  56.         $wiki_item=download_and_save_wiki($mese,$url_portale_wikipedia);
  57.         switch($wiki_item) { // gestione errori
  58.                 case -1:
  59.                         echo "<ul>\n<li>Non &egrave; stato trovato alcun link</li>\n</ul>\n";
  60.                 case -2:
  61.                         echo "<ul>\n<li>Impossibile creare il file di cache</li>\n</ul>\n";
  62.                 case -3:
  63.                         echo "<ul>\n<li>Impossibile scrivere sul file di cache</li>\n</ul>\n";
  64.                 case -4:
  65.                         echo "<ul>\n<li>Errore durante la connessione a <a href=\"http://it.wikipedia.org\" title=\"Wikipedia Italia\">Wikipedia</a></li>\n</ul>\n";
  66.  
  67.         }
  68.        
  69. } else {
  70.         $wiki_item=load_wiki($mese);
  71.         switch($wiki_item) { // gestione errori
  72.                 case -1:
  73.                         echo "<ul>\n<li>Non &egrave; stato possibile prelevare i dati dalla cache</li>\n</ul>\n";
  74.         }
  75. }
  76. if (is_array($wiki_item)) {
  77.         srand(time());
  78.         shuffle($wiki_item);
  79.        
  80.         echo "<ul>\n";
  81.        
  82.         $count_items=count($wiki_item);
  83.         $numero_items=($numero_items>$count_items || $numero_items<=0)?($count_items):($numero_items);
  84.        
  85.         for ($i=0;$i<$numero_items;$i++) {
  86.                 echo "<li><a href=\"".$url_base_wikipedia.$wiki_item[$i]['h']."\" title=\"Approfondisci su Wikipedia il significato di '".$wiki_item[$i]['t']."'\">".$wiki_item[$i]['n']."</a></li>\n";
  87.         }
  88.        
  89.         echo "</ul>\n";
  90. }
  91.  
  92. ?>

Il codice risulta essere facilmente modificabile ad esempio rendendo possibile la creazione di un feed RSS della pagina interessata.
Sarebbe molto bello convertirlo in un plug-in per Wordpress solo che non ho tempo per documentarmi a riguardo quindi se qualcuno ha interesse a farlo ben venga ;)

Daniele Simonin 18 Settembre 2006 alle 11:07 Trackback URI

Scrivi un commento

Tags di formattazione:








Feed

infoPillole (by Wikipedia)

Ultimi commenti

  • flippetta: appena li ho visti sn diventati subito una...
  • Daniele Simonin: Ciao, in giro trovi una marea di guide a...
  • Daniele Simonin: i commenti sono sempre benvoluti ;)
  • chiara: scusate mi sapete dire che cos’è pdo e le...
  • oniduke: Immagino che non dobbiamo neanche commentare :D

Calendario

Maggio 2008
L M M G V S D
« Apr    
 1234
567891011
12131415161718
19202122232425
262728293031  

Archivio

Categorie

News casuali

Ultimi tutorials

Progetti

Alcuni miei lettori

Have a break