Как я могу получить веб-сайт favicon?
Достаточно простой вопрос: я создал небольшое приложение, которое в основном является фаворитом, который сидит в моем системном лотке, чтобы я мог открывать часто используемые сайты/папки/файлы с одного и того же места. Получение значков по умолчанию из моей системы для известных типов файлов не очень сложно, но я не знаю, как получить значок с веб-сайта. (SO имеет значок grey- > оранжевого стека в адресной строке, например)
Кто-нибудь знает, как я могу это сделать?
Ответы
Ответ 1
Вам нужно решить несколько способов:
-
Найдите favicon.ico
в корне домена
www.domain.com/favicon.ico
-
Найдите тег <link>
с атрибутом rel="shortcut icon"
<link rel="shortcut icon" href="/favicon.ico" />
-
Ищите тег <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
Вот 2 варианта, я проверил более 100 URL-адресов и получил разные результаты, которые каждый вариант.
Обратите внимание, что это решение не С#, но С# может не понадобиться.
<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' />
Ответ 3
Вы можете использовать конвертер Google S2.
http://www.google.com/s2/favicons?domain=google.com
Источник: http://www.labnol.org/internet/get-favicon-image-of-websites-with-google/4404/
Ответ 4
Первое, что нужно искать, это /favicon.ico в корне сайта; что-то вроде WebClient.DownloadFile() должно преуспеть. Однако вы также можете установить значок в метаданных - для SO это:
<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()
Вот код, который я использовал для получения этого через пакет гибкости:
var favicon = "/favicon.ico";
var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]");
if (el != null) favicon = el.Attributes["href"].Value;
Обратите внимание, что значок принадлежит им, а не вашему.
Ответ 5
Это хорошая практика для минимизации количества запросов, необходимых каждой странице.
Поэтому, если вам нужно несколько значков, yandex может сделать спрайт favicons в одном запросе.
Вот пример
http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/
Ответ 6
Yo может получить URL-адрес favicon с HTML-кода веб-сайта.
Вот тег favicon:
<link rel="icon" type="image/png" href="/someimage.png" />
Здесь вы должны использовать регулярное выражение. Если тег не найден, найдите "favicon.ico" в корневом каталоге сайта. Если ничего не найдено, на сайте нет значка.
Ответ 7
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");
Ответ 8
Вы можете сделать это без программирования. Просто откройте веб-сайт, щелкните правой кнопкой мыши и выберите "источник" , чтобы открыть HTML-код этого сайта. Затем в текстовом редакторе найдите "значок" - он направит вас на что-то похожее на
<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 на вашем локальном ПК - и все готово!
Ответ 9
Это поздний ответ, но для полноты: довольно сложно получить даже около 90% выборки всех значков.
Некоторое время назад я написал плагин WordPress: http://wordpress.org/extend/plugins/wp-favicons/, который пытается приблизиться.
а. он начинается с просмотра репозиториев favicon, таких как favicons google, getfavicons и т.д.
б. если ни один из них не возвращает значок (я проверяю это, сопоставляя значок по умолчанию, который они возвращают) я начинаю с попытки получить значок сам
с. это включает в себя перемещение страниц, но также проверку перенаправления с NO autoredirect, а также перемещение 404, потому что также на 404 может присутствовать значок. В конце это означает, что вам придется анализировать также перенаправления в заголовке html, а также переадресации javascript, чтобы приблизиться к 100%
д. после этого я делаю некоторые проверки в файле физического изображения, потому что иногда иногда на некоторых серверах (я тестировал 300 000+) файлы возвращаются с неправильным типом mime и т.д.
Код по-прежнему не идеален, потому что в деталях он сходит с ума, вы найдете много странных ситуаций: у людей есть ошибочно закодированные пути (img/favicon.ico, где img НЕ в корне), дубликаты заголовков в html-выходе, различные ответы сервера от головы и тела и т.д.
ядро получаемой части находится здесь: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php, чтобы вы могли его развернуть, но помните, что проверка ответа должна действительно быть (проверка образа файла, mime и т.д.)
Ответ 10
Я обнаружил, что "SHGetFileInfo" (отметьте "www.pinvoke.net" для подписи)
позволяет получить маленький или большой значок, точно так же, как если бы вы имели дело с файлом/папкой/элементом оболочки.
Jens;)
Ответ 11
Вы можете использовать Getfv.co:
Чтобы получить значок, вы можете его связать... http://g.etfv.co/[URL]
Пример для этой страницы: fooobar.com/questions/88521/...
Загрузите контент и отпустите!
Изменить:
Getfv.co и fvicon.com выглядят мертвыми. Если вы хотите, я нашел некую бесплатную альтернативу: grabicon.com.
Ответ 12
/fooobar.com/... дает вам анализ favicon, указывающий, какие значки присутствуют в каком размере. Вы можете обрабатывать информацию о странице, чтобы узнать, что является лучшим значком качества, и добавьте его имя файла в URL-адрес, чтобы получить его.
Ответ 13
Использование jquery
var favicon = $("link[rel='shortcut icon']").attr("href") ||
$("link[rel='icon']").attr("href") || "";