Come posso ottenere la favicon di un sito web?


115

Domanda abbastanza semplice: ho creato una piccola app che è fondamentalmente solo una delle preferite che si trova nella mia barra delle applicazioni in modo da poter aprire siti / cartelle / file usati spesso dallo stesso posto. Ottenere le icone predefinite dal mio sistema per i tipi di file conosciuti non è terribilmente complicato, ma non so come ottenere la favicon da un sito web. (SO ha l'icona della pila grigia-> arancione nella barra degli indirizzi, ad esempio)

Qualcuno sa come potrei farlo?


1
Non sono sicuro di quanto sarebbe facile (o possibile) automatizzare il caricamento / analisi di questa pagina, ma sembra che abbia tutto: Favicon-Checker . Come minimo, puoi usarlo come riferimento / controllo.
Kevin Fegan

Potresti semplicemente usare l' API Favicon di Statvoo , sarebbe abbastanza veloce e indolore.
AO_

Favicon Kit ti consente di ottenere e incorporare favicon come immagini normali, in dimensioni molto più grandi di 16 pixel , se disponibili. (Disclosure: I'm the author)
AndreasPizsa

Risposte:


234

Ti consigliamo di affrontarlo in alcuni modi:

  1. Cerca favicon.icola radice del dominio

    www.domain.com/favicon.ico

  2. Cerca un <link>tag con l' rel="shortcut icon"attributo

    <link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />

  3. Cerca un <link>tag con l' rel="icon"attributo

    <link rel="icon" href="https://stackoverflow.com/favicon.png" />

Gli ultimi due producono generalmente un'immagine di qualità superiore.


Solo per coprire tutte le basi, ci sono file di icone specifici del dispositivo che potrebbero produrre immagini di qualità superiore poiché questi dispositivi di solito hanno icone più grandi sul dispositivo di quanto un browser avrebbe bisogno:

<link rel="apple-touch-icon" href="images/touch.png" />

<link rel="apple-touch-icon-precomposed" href="images/touch.png" />


E per scaricare l'icona senza preoccuparti di quale sia l'icona puoi utilizzare un'utilità come http://www.google.com/s2/favicons che farà tutto il lavoro pesante:

var client = new System.Net.WebClient();

client.DownloadFile(
    @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
    "stackoverflow.com.ico");

1
GetFavIcon funziona ancora? quando eseguo il tuo esempio ottengo un errore 400
Julien

17
sembra che Google abbia un servizio simile ora: google.com/s2/favicons?domain_url=stackoverflow.com
cacciatore

20
se qualcuno vuole un'alternativa a Google, DuckDuckGo ha un'altra soluzione: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio

1
@hunter google.com/s2/faviconsè un'icona con 16x16 è un'icona terribile sai dove prendere un'icona più grande?
nideba

1
@JoseSerodio - Beh ... questa è stata la prima cosa che ho provato, ma per il dominio che stavo controllando, ho appena ottenuto un'immagine "fioca / opaca" di una freccia che punta a destra (maggiore di) all'interno di un cerchio all'interno di un quadrato . Sembrava così , ma ho controllato per assicurarmi di avere "dominio.com.ico" scritto correttamente. Ora, per le meraviglie di Internet, funziona correttamente ... vai a figura =) quindi, non importa.
Kevin Fegan

19

Aggiornato 2020

Ecco tre servizi che puoi utilizzare dal 2020 in poi

<img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />

<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />

<img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />

4
grabicon.com è ora un servizio a pagamento a partire da $ 9 /
mese

1
Un altro: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Martin Seitl

Questo servizio non funziona più, puoi utilizzare api.statvoo.com/favicon/?url=stackoverflow.com . L'ho usato per un paio d'anni e non mi ha mai deluso.
AO_

Grazie @AO_, in realtà sto usando duckduckgo in questi giorni, ho aggiornato la mia risposta
Blowsie

1
@saintvixalien Credo che questo sia cambiato di recente per le persone che non inizializzano con una chiave API, poiché i server venivano picchiati;) Uso il servizio principale con una chiave API e ottengo risposte direttamente senza il wrapper. Ho fatto il test senza una chiave API e reindirizza al servizio di Google come hai detto ..
AO_


6

La prima cosa da cercare è /favicon.ico nella root del sito; qualcosa come WebClient.DownloadFile () dovrebbe andare bene. Tuttavia, puoi anche impostare l'icona nei metadati - per SO questo è:

<link rel="shortcut icon"
   href="http://sstatic.net/stackoverflow/img/favicon.ico">

e nota che potrebbero essere disponibili icone alternative; quello "touch" tende ad essere più grande e con una risoluzione più alta, ad esempio:

<link rel="apple-touch-icon"
   href="http://sstatic.net/stackoverflow/img/apple-touch-icon.png">

quindi dovresti analizzarlo in HTML Agility Pack o XmlDocument (se xhtml) e utilizzare WebClient.DownloadFile ()

Ecco un po 'di codice che ho usato per ottenerlo tramite l'Agility Pack:

var favicon = "/favicon.ico";
var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]");
if (el != null) favicon = el.Attributes["href"].Value;

Nota che l'icona è loro, non tua.


1
Grazie Marc. Apprezzo l'esempio. Con le immagini, non intendo modificarle o usarle per qualcosa di diverso dalle icone nel menu contestuale accanto all'etichetta della scorciatoia.
Steven Evers


3

Puoi ottenere l'URL della favicon dall'HTML del sito web.

Ecco il tag favicon:

<link rel="icon" type="image/png" href="/someimage.png" />

Dovresti usare un'espressione regolare qui. Se non viene trovato alcun tag, cerca "favicon.ico" nella directory principale del sito. Se non viene trovato nulla, il sito non ha una favicon.


2

Puoi farlo senza programmazione . Basta aprire il sito web, fare clic con il tasto destro e selezionare "Visualizza sorgente" per aprire il codice HTML di quel sito. Quindi nell'editor di testo cerca "favicon" : ti indirizzerà a qualcosa di simile

<link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" />

prendere la stringa hrefe aggiungerla all'URL di base del sito web (supponiamo che lo sia "http://WEBSITE/"), in modo che appaia

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

che è il percorso assoluto alla favicon. Se non l'hai trovato in questo modo, può essere anche nella radice, nel qual caso l'URL è http://WEBSITE/favicon.ico.

Prendi l'URL che hai determinato e inseriscilo nel seguente codice:

<html>
  <head>
   <title>Capture Favicon</title>   
  </head>
  <body>
    <a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a> 
  </body>
</html>

Salvare questo codice HTML localmente (ad esempio sul desktop) come GetFavicon.htmle quindi fare doppio clic su di esso per aprirlo. Verrà visualizzato solo un collegamento denominato Favicon . Fai clic con il tasto destro su questo collegamento e seleziona "Salva oggetto con nome ..." per salvare la Favicon sul tuo PC locale - e il gioco è fatto!


1
        HttpWebRequest w = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com/favicon.ico");

        w.AllowAutoRedirect = true;

        HttpWebResponse r = (HttpWebResponse)w.GetResponse();

        System.Drawing.Image ico;
        using (Stream s = r.GetResponseStream())
        {
            ico = System.Drawing.Image.FromStream(s);
        }

        ico.Save("favicon.ico");

1

Questa è una risposta tardiva, ma per completezza: è piuttosto difficile avvicinarsi anche al 90% del recupero di tutte le favicon.

Tempo fa ho scritto un plugin per WordPress: http://wordpress.org/extend/plugins/wp-favicons/ che tenta di avvicinarsi.

un. inizia guardando i repository favicon come google favicon, getfavicons ecc ...

b. se nessuno di loro restituisce un'icona (controllo questo abbinandolo all'icona predefinita, restituiscono) inizio cercando di ottenere l'icona da solo

c. questo comporta l'attraversamento delle pagine ma anche il controllo dei reindirizzamenti senza alcun reindirizzamento automatico e l'attraversamento di 404 perché anche su 404 potrebbe essere presente un'icona. Alla fine significa che dovrai analizzare anche i reindirizzamenti nell'intestazione html così come i reindirizzamenti javascript per avvicinarti al 100%

d. dopodiché eseguo alcune ispezioni sul file dell'immagine fisica, perché a volte anche su alcuni server (ho testato 300.000+) i file vengono restituiti con il tipo MIME errato ecc.

Il codice non è ancora perfetto perché nei dettagli diventa pazzo, troverai molte situazioni strane: le persone hanno percorsi codificati in modo errato (img / favicon.ico dove img NON è nella radice), intestazioni duplicate nell'output html, diverse risposte del server da una testa e da un corpo ecc ...

il nucleo della parte di recupero è qui: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php in modo da poterlo decodificare ma essere consapevoli che la convalida della risposta dovrebbe essere davvero fatto (controllo del tipo di file dell'immagine, mime ecc ..)


1

Ho scoperto che "SHGetFileInfo" (controlla "www.pinvoke.net" per la firma) ti consente di recuperare un'icona piccola o grande, proprio come se avessi a che fare con un file / cartella / elemento Shell.

Jens;)



0

Puoi usare Getfv.co :

Per recuperare una favicon puoi collegarla a ... http://g.etfv.co/[URL]

Esempio per questa pagina: http://g.etfv.co//programming/5119041/how-can-i-get-a-web-sites-favicon

Scarica i contenuti e via!

Modificare :

Getfv.co e fvicon.com sembrano morti. Se vuoi ho trovato un'alternativa non gratuita: grabicon.com .


1
Collegamento
interrotto

@tttony Indeed. Anche fvicon.com sembra morto. Modificherò il mio commento con contenuti a pagamento. se trovi un collegamento gratuito funzionante, condividilo!
aloisdg si trasferisce su codidact.com il

0

Utilizzando jquery

var favicon = $("link[rel='shortcut icon']").attr("href") ||
              $("link[rel='icon']").attr("href") || "";

0

Nel 2020, utilizzando il servizio di duckduckgo.com dalla CLI

curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico

Esempio

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.