Как я могу получить favicon веб-сайта?

достаточно простой вопрос: я создал небольшое приложение, которое в основном просто избранное, которое находится в моем системном трее, чтобы я мог открывать часто используемые сайты/папки/файлы из того же места. Получение иконки по умолчанию из моей системы для известных типов файлов не очень сложно, но я не знаю, как сделать фавикон с сайта. (Так же, как значок серого - > оранжевого стека в адресной строке, например)

кто-нибудь знает, как я могу это сделать?

12 ответов


вы захотите решить эту проблему несколькими способами:

  1. искать favicon.ico в корне домена

    www.domain.com/favicon.ico

  2. искать <link> тега rel="shortcut icon" атрибут

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

  3. искать <link> тега rel="icon" атрибут

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

последние два обычно дают более высокое качество изображение.


просто для того, чтобы охватить все базы, есть конкретные файлы значков устройства, которые могут дать изображения более высокого качества, так как эти устройства обычно имеют большие значки на устройстве, чем браузер потребуется:

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

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


и скачать значок, не заботясь о том, что значок вы можете использовать утилиту, как http://www.google.com/s2/favicons который сделает все тяжелое подъем:

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

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

надеюсь, что это поможет!


вот 2 варианта, я протестировал более 100 URL-адресов и получил разные результаты, которые каждый вариант. Обратите внимание, что это решение не является c#, но c# может не потребоваться.

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

вы можете использовать конвертер Google S2.

http://www.google.com/s2/favicons?domain=google.com

источник: http://www.labnol.org/internet/get-favicon-image-of-websites-with-google/4404/


первое, что нужно искать, это / favicon.ico в корне сайта; что-то вроде WebClient.DownloadFile () должен работать нормально. Однако вы также можете установить значок в метаданных - для этого:

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

и обратите внимание, что альтернативные значки могут быть доступны; "touch" имеет тенденцию быть больше и выше res, например:

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

таким образом, вы проанализируете это в HTML Agility Pack или XmlDocument (если xhtml) и используете служба WebClient.Downloadfile следует()

вот код, который я использовал для получения этого через пакет 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;

обратите внимание, что значок принадлежит им, а не вам.


Yo может получить URL-адрес favicon с веб-сайта-S HTML.

вот тег favicon:

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

здесь следует использовать регулярное выражение. Если тег не найден, найдите " favicon.МБО" в корневом каталоге сайта. Если ничего не найдено, сайт не имеет favicon.


Это хорошая практика, чтобы свести к минимуму количество запросов, необходимых каждой странице. Поэтому, если вам нужно несколько иконок, Яндекс может сделать спрайт фавиконов в одном запросе. Вот пример http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/


        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");

вы можете сделать это без программирования. Просто откройте веб-сайт, щелкните правой кнопкой мыши и выберите "исходный код" открыть HTML код этого сайта. Затем в текстовом редакторе найдите "favicon" - он направит вас к чему-то похожему

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

берем строку href и добавьте его к базовому URL-адресу веб-сайта (предположим, что это "http://WEBSITE/"), Так что это выглядит как

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

- абсолютный путь к фавикон. Если вы не нашли его таким образом, он может быть также в корне, в этом случае URL-адрес http://WEBSITE/favicon.ico.

возьмите URL, который вы определили, и вставьте его в следующий код:

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

Сохраните этот HTML-код локально (например, на рабочем столе) как GetFavicon.html а затем дважды щелкните по нему, чтобы открыть его. Он будет отображать только ссылку с именем Favicon. Щелкните правой кнопкой мыши на этом ссылка и выберите "сохранить объект как..." чтобы сохранить Favicon на локальном ПК - и вы сделали!


это поздний ответ, но для полноты картины: довольно трудно получить даже близко к 90% загрузки всех иконок.

некоторое время назад я написал плагин WordPress:http://wordpress.org/extend/plugins/wp-favicons/ который пытается приблизиться.

a. он начинается с просмотра репозиториев favicon, таких как Google favicons, getfavicons и т. д...

b. если ни один из них не возвращает значок (Я проверяю это, сопоставляя значок по умолчанию возвращаться) я начинаю с попытки получить значок сам

c. это включает в себя прохождение страниц, но и проверку перенаправления без автозамены, а также прохождение 404, потому что также на 404-х значок может присутствовать. В конце концов, это означает, что вам придется анализировать также перенаправляет в заголовке html, а также перенаправляет javascript, чтобы приблизиться к 100%

d. после этого я делаю некоторые проверки на физическом файле образа, потому что также иногда на некоторых серверах (я тестировал 300.000+) файлы возвращаются с неправильным типом mime и т. д..

код все еще не идеален, потому что в деталях он становится сумасшедшим, вы найдете много странных ситуаций: люди имеют неправильно закодированные пути (img/favicon.ico, где img нет в корне), дублировать заголовки в выводе html, разные ответы сервера от головы и тела и т. д...

ядро части выборки находится здесь: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php таким образом, вы можете перепроектировать его, но помните, что проверка ответа действительно должна быть сделана (проверка типа файла изображения, mime и т. д..)


Я обнаружил, что ' SHGetFileInfo '(проверить 'www.pinvoke.net-для подписи. ) позволяет получить небольшой или большой значок, как если бы вы имели дело с файлом/папкой/элементом оболочки.

Йенс ;)


http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com дает вам анализ фавикона, указывающий, какие фавиконы присутствуют в каком размере. Вы можете обработать информацию о странице, чтобы увидеть, какой фавикон лучшего качества, и добавить его имя файла к URL, чтобы получить его.


вы можете использовать Getfv.co:

чтобы получить favicon Вы можете hotlink его на... http://g.etfv.co / [URL]

пример для этой страницы : http://g.etfv.co/https://stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon

скачать контент и поехали !

Edit:

Getfv.co и fvicon.com выглядят мертвыми. Если хочешь, я нашел несвободную альтернативу. : grabicon.com.