162 votes

Comment puis-je obtenir la favicon d'un site web ?

Question assez simple : J'ai créé une petite application qui est essentiellement juste un favori qui se trouve dans ma barre d'état système afin que je puisse ouvrir des sites/dossiers/fichiers souvent utilisés à partir du même endroit. Obtenir les icônes par défaut de mon système pour les types de fichiers connus n'est pas très compliqué, mais je ne sais pas comment obtenir la favicon d'un site web. (SO a l'icône de pile grise->orange dans la barre d'adresse par exemple)

Quelqu'un sait-il comment je pourrais m'y prendre ?

1 votes

Je ne suis pas sûr qu'il soit facile (ou possible) d'automatiser le chargement et l'analyse de cette page, mais elle semble avoir tout ce qu'il faut : Vérificateur de favicons . Au moins, vous pouvez l'utiliser comme référence/vérification.

0 votes

Vous pourriez simplement utiliser le Statvoo Favicon API ce serait assez rapide et sans douleur.

0 votes

Kit Favicon vous permet d'obtenir et d'incorporer des favicons comme des images normales, en des tailles bien plus grandes que 16 pixels si disponible. (Divulgation : je suis l'auteur)

316voto

hunter Points 33850

Vous pouvez aborder cette question de plusieurs façons :

  1. Cherchez le favicon.ico à la racine du domaine

    www.domain.com/favicon.ico

  2. Recherchez un <link> avec la balise rel="shortcut icon" attribut

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

  3. Recherchez un <link> avec la balise rel="icon" attribut

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

Ces deux dernières options permettent généralement d'obtenir une image de meilleure qualité.


Pour couvrir toutes les bases, il existe des fichiers d'icônes spécifiques aux appareils qui peuvent donner des images de meilleure qualité, car ces appareils ont généralement des icônes plus grandes que celles dont un navigateur a besoin :

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

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


Et pour télécharger l'icône sans se soucier de ce qu'elle est, vous pouvez utiliser un utilitaire comme http://www.google.com/s2/favicons qui fera le gros du travail :

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

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

2 votes

GetFavIcon fonctionne-t-il toujours ? Lorsque j'exécute votre exemple, j'obtiens une erreur 400.

25 votes

On dirait que Google a un service similaire maintenant : google.com/s2/favicons?domain_url=stackoverflow.com

31 votes

Si quelqu'un veut une alternative à Google, DuckDuckGo propose une autre solution : icons.duckduckgo.com/ip2/www.stackoverflow.com.ico

47voto

Blowsie Points 25114

Mise à jour 2020

Voici trois services que vous pourrez utiliser à partir de 2020

<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' />

5 votes

Grabicon.com est maintenant un service payant à partir de 9 $/mois.

1 votes

Un autre : favicon.allesedv.com <img width="144" height="144" src="//f3.allesedv.com/144/www.stackoverflow.com" />

0 votes

Ce service ne fonctionne plus, vous pouvez utiliser api.statvoo.com/favicon/?url=stackoverflow.com . Je l'utilise depuis quelques années et il ne m'a jamais laissé tomber.

17voto

user740908 Points 21

0 votes

Oui, c'est ce que je fais. Pour mon tampermonkey scripts, je modifie simplement domain= (par exemple google.com/s2/favicons?domain=doodstream.com )

7voto

Marc Gravell Points 482669

La première chose à rechercher est /favicon.ico dans le Root du site ; quelque chose comme WebClient.DownloadFile() devrait faire l'affaire. Cependant, vous pouvez également définir l'icône dans les métadonnées - pour SO, c'est :

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

et notez que d'autres icônes peuvent être disponibles ; l'icône "tactile" a tendance à être plus grande et de plus haute résolution, par exemple :

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

Vous devez donc analyser ce fichier dans le pack HTML Agility ou XmlDocument (si xhtml) et utiliser WebClient.DownloadFile().

Voici un code que j'ai utilisé pour obtenir ceci via le pack agilité :

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

Notez que l'icône est la leur, pas la vôtre.

1 votes

Merci Marc. J'apprécie l'exemple. En ce qui concerne les images, je n'ai pas l'intention de les modifier ou de les utiliser pour autre chose que des icônes dans le menu contextuel à côté de l'étiquette du raccourci.

5voto

OOO ''MMM'' Points 149

Vous pouvez obtenir l'URL du favicon à partir du code HTML du site web.

Voici le favicon élément :

<link rel="icon" type="image/png" href="http://stackoverflow.com/someimage.png" />

Vous devez utiliser une expression régulière ici. Si aucune balise n'est trouvée, recherchez favicon.ico dans le répertoire racine du site. Si rien n'est trouvé, le site n'a pas de favicon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X