2010-01-02 20 views
8

Desidero elencare siti web in evidenza sul mio sito Web e ho pensato che sarebbe stato bello onorare e utilizzare la loro favicon. Come posso ottenerlo dal dominio per un URL arbitrario in JSP o XSLT? Posso licenziare PHP o javascript, ma XSLT è la metodologia preferita.Come posso recuperare la favicon di un sito web?

+2

per ottenere una favicon si può usare questo: http://www.google.com/s2/favicons?domain=domain_name –

risposta

17

Per ottenere la favicon di un sito web, è necessario caricare il codice HTML indice di ogni sito web in evidenza e verificare la presenza di una delle seguenti operazioni:

HTML:

<link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico"> 
<link rel="icon" type="image/png" href="http://example.com/image.png"> 
<link rel="icon" type="image/gif" href="http://example.com/image.gif"> 

XHTML:

<link rel="icon" type="image/vnd.microsoft.icon" href="/somepath/image.ico" /> 
<link rel="icon" type="image/png" href="/somepath/image.png" /> 
<link rel="icon" type="image/gif" href="/somepath/image.gif" /> 

Internet Explorer possono utilizzare un formato leggermente diverso:

<link rel="SHORTCUT ICON" href="http://www.example.com/myicon.ico" /> 

Si noti inoltre che poiché la maggior parte dei browser Web non richiede il collegamento HTML per recuperare una favicon, è necessario controllare anche per favicon.ico nella radice del documento del sito Web, se non viene trovato nessuno dei riferimenti di collegamento sopra.

con PHP, è facile per ottenere il contenuto HTML di una pagina web utilizzando file_get_contents($url):

$url = 'http://www.exmaple.com'; 
$output = file_get_contents($url); 
+2

ECCELLENTE! Grazie per il dettaglio Daniel. Controllerò il tutorial PHP e ti farò sapere come funziona. – mobibob

0

Ecco il mio tentativo di esso. Esso utilizza diverse strategie per risolvere i tanti casi possibili:

<? 
/* 
    nws-favicon : Get site's favicon using various strategies 

    This script is part of NWS 
    https://github.com/xaccrocheur/nws/ 

*/ 


function CheckImageExists($imgUrl) { 
    if (@GetImageSize($imgUrl)) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 

function getFavicon ($url) { 

$fallback_favicon = "/var/www/favicon.ico";  
// $fallback_favicon = "http://stackoverflow.com/favicon.ico"; 


    $dom = new DOMDocument(); 
    @$dom->loadHTML($url); 
    $links = $dom->getElementsByTagName('link'); 
    $l = $links->length; 
    $favicon = "/favicon.ico"; 
    for($i=0; $i<$l; $i++) { 
     $item = $links->item($i); 
     if(strcasecmp($item->getAttribute("rel"),"shortcut icon") === 0) { 
      $favicon = $item->getAttribute("href"); 
      break; 
     } 
    } 

    $u = parse_url($url); 

    $subs = explode('.', $u['host']); 
    $domain = $subs[count($subs) -2].'.'.$subs[count($subs) -1]; 

    $file = "http://".$domain."/favicon.ico"; 
    $file_headers = @get_headers($file); 

    if($file_headers[0] == 'HTTP/1.1 404 Not Found' || $file_headers[0] == 'HTTP/1.1 404 NOT FOUND' || $file_headers[0] == 'HTTP/1.1 301 Moved Permanently') { 

     $fileContent = @file_get_contents("http://".$domain); 

     $dom = @DOMDocument::loadHTML($fileContent); 
     $xpath = new DOMXpath($dom); 

     $elements = $xpath->query("head/link//@href"); 

     $hrefs = array(); 

     foreach ($elements as $link) { 
      $hrefs[] = $link->value; 
     } 

     $found_favicon = array(); 
     foreach ($hrefs as $key => $value) { 
      if(substr_count($value, 'favicon.ico') > 0) { 
       $found_favicon[] = $value; 
       $icon_key = $key; 
      } 
     } 

     $found_http = array(); 
     foreach ($found_favicon as $key => $value) { 
      if(substr_count($value, 'http') > 0) { 
       $found_http[] = $value; 
       $favicon = $hrefs[$icon_key]; 
       $method = "xpath"; 
      } else { 
       $favicon = $domain.$hrefs[$icon_key]; 
       if (substr($favicon, 0, 4) != 'http') { 
        $favicon = 'http://' . $favicon; 
        $method = "xpath+http"; 
       } 
      } 
     } 

     if (isset($favicon)) { 
      if (!CheckImageExists($favicon)) { 
       $favicon = $fallback_favicon; 
       $method = "fallback"; 
      } 
     } else { 
      $favicon = $fallback_favicon; 
      $method = "fallback"; 
     } 

    } else { 
     $favicon = $file; 
     $method = "classic"; 

     if (!CheckImageExists($file)) { 
      $favicon = $fallback_favicon; 
      $method = "fallback"; 
     } 

    } 
    return $favicon; 
} 

?> 
0

Aprire il codice sorgente della pagina (fare clic con il pulsante destro del mouse Visualizza l'origine della pagina) trovare la riga sotto indicata, fare clic sul collegamento images/favicon.png.

<link rel="icon" href="images/favicon.png" type="image/png" sizes="16x16"> 
Problemi correlati