web-dev-qa-db-fra.com

Comment puis-je obtenir le favicon d'un site Web?

Question assez simple: j'ai créé une petite application qui est essentiellement un favori qui se trouve dans ma barre d'état système afin de pouvoir ouvrir des sites/dossiers/fichiers fréquemment 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 terriblement compliqué, mais je ne sais pas comment obtenir les favicon d'un site Web. (Par exemple, l’icône de pile grise-> orange figure dans la barre d’adresse)

Est-ce que quelqu'un sait comment je pourrais m'y prendre?

92
Steven Evers

Vous voudrez vous attaquer à cela de plusieurs manières:

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

    www.domain.com/favicon.ico

  2. Cherchez un <link>tiquette avec le rel="shortcut icon" attribut

    <link rel="shortcut icon" href="/favicon.ico" />

  3. Cherchez un <link>tiquette avec le rel="icon" attribut

    <link rel="icon" href="/favicon.png" />

Ces deux derniers donneront généralement une image de meilleure qualité.


Juste pour couvrir toutes les bases, il existe des fichiers d'icônes spécifiques à l'appareil qui peuvent donner des images de meilleure qualité, car ces appareils ont généralement des icônes plus grandes que celles qu'un navigateur aurait 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 son icône, vous pouvez utiliser un utilitaire tel que 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");

J'espère que ça t'as aidé!

196
hunter

Voici 2 options, j'ai testé plus de 100 URL et obtenu des résultats différents pour chaque option. Veuillez noter que cette solution n'est pas c #, mais c # peut ne pas être nécessaire.

<img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' />

<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' />
10
Blowsie
9
raminjacobson

La première chose à rechercher est /favicon.ico dans la racine du site; quelque chose comme WebClient.DownloadFile () devrait bien se passer. 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 des icônes alternatives peuvent être disponibles; la "touche" on a tendance à être plus grande et 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 cela dans le HTML Agility Pack ou XmlDocument (si xhtml) et utiliser WebClient.DownloadFile ()

Voici un code que j'ai utilisé pour l'obtenir via le pack d'agility:

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 leur appartient et non la vôtre.

6
Marc Gravell

Il est recommandé de minimiser le nombre de demandes nécessaires à chaque page. Donc, si vous avez besoin de plusieurs icônes, yandex peut créer un Sprite de favicons en une seule requête. Voici un exemple http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

4
doroshko

Vous pouvez obtenir l’URL favicon à partir du code HTML du site Web.

Voici le tag favicon:

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

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

3
OOO ''MMM''

Vous pouvez le faire sans programmation. Ouvrez simplement le site Web, cliquez avec le bouton droit de la souris et sélectionnez "Voir la source" pour ouvrir le code HTML de ce site. Ensuite, dans l’éditeur de texte, recherchez "favicon" - cela vous dirigera vers quelque chose qui ressemble à

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

prenez la chaîne dans href et ajoutez-la à l'URL de base du site Web (supposons qu'il s'agisse de "http://WEBSITE/"), on dirait

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

qui est le chemin absolu vers le favicon. Si vous ne l'avez pas trouvé de cette façon, il se peut que ce soit aussi à la racine, auquel cas l'URL est http://WEBSITE/favicon.ico.

Prenez l'URL que vous avez déterminée et insérez-la dans le code suivant:

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

Enregistrez ce code HTML localement (sur votre bureau, par exemple) sous le nom GetFavicon.html et double-cliquez dessus pour l'ouvrir. Il affichera uniquement un lien nommé Favicon. Faites un clic droit sur ce lien et sélectionnez "Enregistrer la cible sous ..." pour enregistrer le Favicon sur votre PC local - et vous avez terminé!

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

C'est une réponse tardive, mais pour être complet: il est assez difficile d'obtenir près de 90% de la récupération de tous les favicons.

Il y a quelque temps, j'ai écrit un plugin WordPress: http://wordpress.org/extend/plugins/wp-favicons/ ] qui tente de se rapprocher.

une. il commence par regarder les dépôts de favicon tels que google favicons, getfavicons etc ...

b. si aucun d'eux ne retourne une icône (je vérifie cela en faisant correspondre l'icône par défaut qu'ils retournent), je commence par essayer d'obtenir l'icône moi-même

c. cela implique de parcourir les pages, mais aussi de vérifier les redirections avec NO autoredirect, ainsi que de parcourir les 404, car une icône pourrait également être présente sur les 404. En fin de compte, cela signifie que vous devrez analyser également les redirections dans l'en-tête html, ainsi que les redirections javascript, pour vous rapprocher de 100%.

ré. après cela, je fais quelques inspections sur le fichier image physique, parce que parfois aussi sur certains serveurs (j'ai testé plus de 300 000), les fichiers sont retournés avec le type mime incorrect, etc.

Le code n'est toujours pas parfait car dans les détails, il devient fou, vous trouverez de nombreuses situations étranges: les gens ont des chemins mal codés (img/favicon.ico où img n'est PAS dans la racine), des en-têtes en double dans la sortie html, des réponses de serveur différentes de la tête et du corps, etc ...

le noyau de la partie de récupération est ici: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php afin que vous puissiez le reverse engineering, mais sachez que la validation de la réponse doit vraiment être faite (vérification du type d’image, mime, etc.)

1
edelwater

J'ai trouvé que le 'SHGetFileInfo' (vérifiez la signature de la page www.pinvoke.net) vous permet de récupérer une petite ou une grande icône, comme si vous utilisiez un fichier/dossier/élément de shell.

Jens;)

1
Jens

http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com vous fournit une analyse des favicon indiquant quels favicons sont présents dans quelle taille. Vous pouvez traiter les informations de page pour voir quel favicon de qualité est de la meilleure qualité, puis ajouter son nom de fichier à l'URL pour l'obtenir.

0
robotik

En utilisant jquery

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

Vous pouvez utiliser Getfv.co :

Pour récupérer un favicon, vous pouvez le mettre en lien direct à ... http://g.etfv.co/ [URL]

Exemple pour cette page: http://g.etfv.co/https://stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon

Téléchargez le contenu et c'est parti!

Modifier :

Getfv.co et fvicon.com semblent morts. Si vous voulez, j'ai trouvé une alternative non libre: grabicon.com .

0
aloisdg