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

question assez Simple: j'ai créé une petite application qui est fondamentalement juste un Favoris qui se trouve dans mon plateau de système de sorte que je puisse ouvrir les 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 le favicon à partir d'un site web. (Le gris->orange pile icône dans la barre d'adresse par exemple)

personne Ne sait comment je pourrais m'y prendre?

72
demandé sur Steven Evers 2011-02-25 18:25:39

12 réponses

, Vous aurez envie de s'attaquer à cette quelques façons:

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

    www.domain.com/favicon.ico

  2. recherchez une étiquette <link> avec l'attribut rel="shortcut icon" "

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

  3. recherchez une étiquette <link> avec l'attribut rel="icon" 1519120920"

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

les deux derniers donnent habituellement une image de meilleure qualité.


juste pour couvrir toutes les bases, il ya des fichiers d'icônes spécifiques à l'appareil qui pourraient produire des images de meilleure qualité, car ces appareils ont généralement de plus grandes icônes sur l'appareil 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 ce que l'icône est, vous pouvez utiliser un utilitaire comme http://www.google.com/s2/favicons qui fera tout le levage lourd:

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

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

Espère que ça aide!

167
répondu hunter 2017-06-02 19:37:14

voici 2 options, j'ai testé plus de 100 urls et obtenu des résultats différents que 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
répondu Blowsie 2016-02-20 01:53:31

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

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

et noter que d'autres icônes peuvent être disponibles; la "touche" a tendance à être plus grande et plus haute res, par exemple:

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

pour que vous puissiez analyser cela dans le Pack D'agilité HTML ou XmlDocument (si xhtml) et utiliser WebClient.DownloadFile ()

voici un code que j'ai utilisé pour obtenir ceci via le pack d'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 à eux, pas à vous.

5
répondu Marc Gravell 2011-02-25 15:31:18

vous pouvez obtenir L'URL favicon du site-s HTML.

Voici l'étiquette favicon:

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

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

3
répondu OOO ''MMM'' 2011-02-25 15:33:06

c'est une bonne pratique de minimiser le nombre de requêtes dont chaque page a besoin. Donc si vous avez besoin de plusieurs icônes, yandex peut faire un sprite de favicons dans une requête. Voici un exemple http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

3
répondu doroshko 2016-02-11 00:51:38
        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
répondu pmcilreavy 2011-02-25 15:40:22

Vous pouvez le faire sans programmation . Il suffit d'ouvrir le site web, de cliquer avec le bouton droit de la souris et de sélectionner "view source" pour ouvrir le code HTML de ce site. Puis dans l'éditeur de texte Rechercher "favicon" - il vous dirigera à quelque chose ressemblant à

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

prendre la chaîne dans href et l'ajouter à L'URL de base du site web (supposons qu'il est "http://WEBSITE/" ), donc il ressemble à

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

qui est le chemin absolu vers le favicon. Si vous ne l'avez pas trouvé ainsi, il peut aussi bien être à 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 (par exemple sur votre bureau) comme GetFavicon.html et double-cliquez dessus pour de l'ouvrir. Il n'affichera qu'un lien nommé Favicon . Clic-droit sur ce lien et sélectionnez "Enregistrer la cible sous..." pour enregistrer l'Favicon sur votre PC local et vous avez terminé!

2
répondu Matt 2013-07-02 15:32:22

C'est une réponse tardive, mais pour l'exhaustivité: il est assez difficile d'obtenir même près de 90% de récupération de toutes les icônes.

il y a un moment j'ai écrit un plugin WordPress: http://wordpress.org/extend/plugins/wp-favicons / qui tente de se rapprocher.

A. il commence par examiner les dépôts de favicon tels que Google favicons, getfavicons, etc...

B. si aucun d'eux ne renvoie une icône (je coche cela en faisant correspondre avec l'icône par défaut qu'ils renvoient) 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 sans autoredirect ainsi que de parcourir les 404 parce que même sur les 404 une icône pourrait être présente. En fin de compte, cela signifie que vous devrez analyser aussi redirections dans l'en-tête html ainsi que les redirections javascript pour se rapprocher d'être 100%

D. après cela, je fais quelques inspections sur le fichier image physique, parce que parfois aussi sur certains serveurs(j'ai testé 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 bizarres: les gens ont mal codé les chemins (img/favicon.ico où img N'est pas dans la racine), dupliquer les en-têtes dans la sortie html, réponses différentes du serveur d'une tête et d'un corps, etc...

le noyau de la partie de fetching est ici: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php donc vous pouvez rétro-concevoir il mais être conscient que la validation de la réponse doit vraiment être fait (en vérifiant image filetype, mime etc..)

1
répondu edelwater 2013-02-24 17:54:25

j'ai trouvé que le ' SHGetFileInfo '(vérifier 'www.pinvoke.net" pour la signature) permet de récupérer une petite ou une grande icône, comme si nous avions affaire à un fichier/dossier/Shell élément.

Jens ;)

1
répondu Jens 2013-11-12 17:53:55

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

0
répondu robotik 2015-09-11 08:59:59

vous pouvez utiliser Getfv.co :

Pour récupérer un favicon vous pouvez vous connecté à... http://g.etfv.co/[URL]

exemple pour cette page: http://g.etfv.co//q/how-can-i-get-a-web-site-s-favicon-46533/"https://grabicon.com /" rel= "nofollow noreferrer" >grabicon.com .

0
répondu aloisdg 2017-05-23 12:10:32