Wie kann ich das Favicon einer Website erhalten?

115

Einfach genug Frage: Ich habe eine kleine App erstellt, die im Grunde nur ein Favorit ist und sich in meiner Taskleiste befindet, damit ich häufig verwendete Websites / Ordner / Dateien von derselben Stelle aus öffnen kann. Das Abrufen der Standardsymbole von meinem System für bekannte Dateitypen ist nicht besonders kompliziert, aber ich weiß nicht, wie ich das Favicon von einer Website abrufen kann. (SO hat zum Beispiel das grau-orangefarbene Stapelsymbol in der Adressleiste)

Weiß jemand, wie ich das machen könnte?

Steven Evers
quelle
Ich bin mir nicht sicher, wie einfach (oder möglich) es wäre, das Laden / Parsen dieser Seite zu automatisieren, aber es scheint alles zu haben: Favicon-Checker . Zumindest können Sie es als Referenz / Scheck verwenden.
Kevin Fegan
Sie könnten einfach die Statvoo Favicon API verwenden , das wäre ziemlich schnell und schmerzlos.
AO_
Mit dem Favicon Kit können Sie Favicons wie normale Bilder in Größen von mehr als 16 Pixel erhalten und einbetten , sofern verfügbar. (Offenlegung: Ich bin der Autor)
AndreasPizsa

Antworten:

234

Sie sollten dies auf einige Arten angehen:

  1. Suchen Sie nach favicon.icodem Stammverzeichnis der Domain

    www.domain.com/favicon.ico

  2. Suchen Sie nach einem <link>Tag mit dem rel="shortcut icon"Attribut

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

  3. Suchen Sie nach einem <link>Tag mit dem rel="icon"Attribut

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

Die beiden letzteren ergeben normalerweise ein Bild mit höherer Qualität.


Um alle Grundlagen abzudecken, gibt es gerätespezifische Symboldateien, die möglicherweise Bilder mit höherer Qualität liefern, da diese Geräte normalerweise größere Symbole auf dem Gerät haben, als ein Browser benötigen würde:

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

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


Und um das Symbol herunterzuladen, ohne sich um das Symbol zu kümmern, können Sie ein Dienstprogramm wie http://www.google.com/s2/favicons verwenden, das das gesamte schwere Heben übernimmt:

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

client.DownloadFile(
    @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
    "stackoverflow.com.ico");
Jäger
quelle
1
funktioniert GetFavIcon noch? wenn ich Ihr Beispiel führe ich einen 400 Fehler bekommen
Julien
16
Es sieht so aus, als hätte Google jetzt einen ähnlichen Dienst: google.com/s2/favicons?domain_url=stackoverflow.com
Jäger
19
Wenn jemand eine Alternative zu Google möchte, hat DuckDuckGo eine andere Lösung: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio
1
@hunter google.com/s2/faviconses ist ein Icon mit 16x16 es ist ein schreckliches Icon weißt du wo du ein größeres Icon nehmen sollst?
Nideba
1
@JoseSerodio - Nun ... das war das erste, was ich versuchte, aber für die Domain, die ich überprüfte, bekam ich nur ein "trübes / langweiliges" Bild eines nach rechts zeigenden Pfeils (größer als) innerhalb eines Kreises innerhalb eines Quadrats . Es sah so aus , aber ich habe überprüft, ob "domain.com.ico" richtig geschrieben ist. Nun, nach den Wundern des Internets funktioniert es richtig ... go figure =) Also, Nevermind.
Kevin Fegan
18

Aktualisiert 2020

Hier sind drei Dienste, die Sie ab 2020 nutzen können

<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' />
Blowsie
quelle
4
grabicon.com ist jetzt kostenpflichtiger Service ab $ 9 /
Monat
1
Eine andere: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Martin Seitl
Dieser Dienst funktioniert nicht mehr. Sie können api.statvoo.com/favicon/?url=stackoverflow.com verwenden . Ich habe es für ein paar Jahre benutzt und es hat mich nie im Stich gelassen.
AO_
Danke @AO_, ich benutze heutzutage tatsächlich duckduckgo. Ich habe meine Antwort aktualisiert
Blowsie
1
@saintvixalien Ich glaube, dies hat sich kürzlich für Leute geändert, die nicht mit einem API-Schlüssel initialisieren, da die Server überlastet wurden;) Ich verwende den Primärdienst mit einem API-Schlüssel und erhalte Antworten direkt ohne den Wrapper. Ich habe ohne API-Schlüssel getestet und er leitet, wie Sie sagten, zum Google-Dienst weiter.
AO_
6

Das erste, wonach Sie suchen müssen, ist /favicon.ico im Site-Stammverzeichnis. so etwas wie WebClient.DownloadFile () sollte gut funktionieren. Sie können das Symbol jedoch auch in Metadaten festlegen - für SO ist dies:

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

und beachten Sie, dass möglicherweise alternative Symbole verfügbar sind. Die "Berührung" ist tendenziell größer und höher aufgelöst, zum Beispiel:

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

Sie würden dies also entweder im HTML Agility Pack oder in XmlDocument (falls xhtml) analysieren und WebClient.DownloadFile () verwenden.

Hier ist ein Code, den ich verwendet habe, um dies über das Agility Pack zu erhalten:

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

Beachten Sie, dass das Symbol ihnen gehört und nicht Ihnen.

Marc Gravell
quelle
1
Danke Marc. Ich schätze das Beispiel. Bei den Bildern beabsichtige ich nicht, sie zu ändern oder für andere Zwecke als Symbole im Kontextmenü neben der Beschriftung der Verknüpfung zu verwenden.
Steven Evers
3

Sie können die Favicon-URL aus dem HTML-Code der Website abrufen.

Hier ist das Favicon-Tag:

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

Sie sollten hier einen regulären Ausdruck verwenden. Wenn kein Tag gefunden wurde, suchen Sie im Site-Stammverzeichnis nach "favicon.ico". Wenn nichts gefunden wird, hat die Site kein Favicon.

OOO '' MMM ''
quelle
2

Sie können es ohne Programmierung tun . Öffnen Sie einfach die Website, klicken Sie mit der rechten Maustaste und wählen Sie "Quelle anzeigen" , um den HTML-Code dieser Website zu öffnen. Suchen Sie dann im Texteditor nach "favicon" - Sie werden zu etwas weitergeleitet, das aussieht

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

Nehmen Sie die Zeichenfolge auf hrefund hängen Sie sie an die Basis-URL der Website an (nehmen wir an, dass dies der Fall ist "http://WEBSITE/")

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

Das ist der absolute Weg zum Favicon. Wenn Sie es nicht so gefunden haben, kann es sich auch im Stammverzeichnis befinden. In diesem Fall lautet die URL http://WEBSITE/favicon.ico.

Nehmen Sie die von Ihnen festgelegte URL und fügen Sie sie in den folgenden Code ein:

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

Speichern Sie diesen HTML-Code lokal (z. B. auf Ihrem Desktop) unter GetFavicon.htmlund doppelklicken Sie darauf, um ihn zu öffnen. Es wird nur ein Link namens Favicon angezeigt . Klicken Sie mit der rechten Maustaste auf diesen Link und wählen Sie "Ziel speichern unter ..." , um das Favicon auf Ihrem lokalen PC zu speichern - und fertig!

Matt
quelle
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");
pmcilreavy
quelle
1

Dies ist eine späte Antwort, aber der Vollständigkeit halber: Es ist ziemlich schwierig, 90% des Abrufs aller Favoriten zu erreichen.

Vor einiger Zeit habe ich ein WordPress-Plugin geschrieben: http://wordpress.org/extend/plugins/wp-favicons/, das versucht, näher zu kommen.

ein. Es beginnt mit der Betrachtung von Favicon-Repositories wie Google Favicons, Getfavicons usw.

b. Wenn keiner von ihnen ein Symbol zurückgibt (ich überprüfe dies, indem ich mit dem Standard-Symbol übereinstimme, das sie zurückgeben), versuche ich zunächst, das Symbol selbst zu erhalten

c. Dies beinhaltet das Durchlaufen der Seiten, aber auch das Überprüfen von Weiterleitungen ohne automatische Weiterleitung sowie das Durchlaufen von 404, da auch bei 404 ein Symbol vorhanden sein kann. Am Ende bedeutet dies, dass Sie auch Weiterleitungen im HTML-Header sowie Javascript-Weiterleitungen analysieren müssen, um näher an 100% zu kommen

d. Danach mache ich einige Inspektionen an der physischen Image-Datei, weil manchmal auch auf einigen Servern (ich habe 300.000+ getestet) Dateien mit dem falschen MIME-Typ usw. zurückgegeben werden.

Der Code ist immer noch nicht perfekt, weil in den Details, in denen er verrückt wird, viele seltsame Situationen auftreten: Menschen haben falsch codierte Pfade (img / favicon.ico, wobei img NICHT im Stammverzeichnis ist), doppelte Header in der HTML-Ausgabe, unterschiedliche Serverantworten von einem Kopf und Körper etc ...

Der Kern des Abrufteils befindet sich hier: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php, damit Sie ihn zurückentwickeln können, sich jedoch bewusst sein sollten, dass die Antwort validiert werden sollte wirklich getan werden (Überprüfen des Bilddateityps, der Pantomime usw.)

Edelwasser
quelle
1

Ich habe festgestellt, dass Sie mit 'SHGetFileInfo' (überprüfen Sie 'www.pinvoke.net' auf die Signatur) ein kleines oder großes Symbol abrufen können, als ob Sie es mit einer Datei / einem Ordner / einem Shell-Element zu tun hätten.

Jens;)

Jens
quelle
0

Sie können Getfv.co verwenden :

Um ein Favicon abzurufen, können Sie es unter ... http://g.etfv.co/[URL] verlinken.

Beispiel für diese Seite: http://g.etfv.co//programming/5119041/how-can-i-get-a-web-sites-favicon

Inhalte herunterladen und los geht's!

Bearbeiten:

Getfv.co und fvicon.com sehen tot aus. Wenn Sie möchten, habe ich eine nicht kostenlose Alternative gefunden: grabicon.com .

aloisdg wechselt zu codidact.com
quelle
1
Link tot, Fehler: Nicht gefunden
tttony
@tttony In der Tat. fvicon.com sieht auch tot aus. Ich werde meinen Kommentar mit bezahlten Inhalten bearbeiten. Wenn Sie einen kostenlosen Link finden, teilen Sie ihn bitte mit!
Aloisdg zieht zu codidact.com
0

Verwenden von jquery

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

Im Jahr 2020 wird der Dienst von duckduckgo.com über die CLI genutzt

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

Beispiel

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Alex Nolasco
quelle