Search code examples
c#.net-4.0favicon

How can I get a web site's favicon?


I've created a small app that is basically just a favourites that sits in my system tray so that I can open often-used sites/folders/files from the same place. Getting the default icons from my system for known file types isn't terribly complicated, but I don't know how to get the favicon from a website. (SO has the grey->orange stack icon in the address bar for instance)

Does anyone know how I might go about that?


Solution

  • You'll want to tackle this a few ways:

    1. Look for the favicon.ico at the root of the domain

      www.domain.com/favicon.ico

    2. Look for a <link> tag with the rel="shortcut icon" attribute

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

    3. Look for a <link> tag with the rel="icon" attribute

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

    The latter two will usually yield a higher quality image.


    Just to cover all of the bases, there are device specific icon files that might yield higher quality images since these devices usually have larger icons on the device than a browser would need:

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

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


    And to download the icon without caring what the icon is you can use a utility like http://www.google.com/s2/favicons which will do all of the heavy lifting:

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