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

115

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

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

Стивен Эверс
источник
1
Я не уверен, насколько легко (или возможно) было бы автоматизировать загрузку / анализ этой страницы, но, похоже, у нее есть все: Favicon-Checker . По крайней мере, вы можете использовать это как ссылку / проверку.
Кевин Феган
Вы можете просто использовать API-интерфейс Statvoo Favicon , это будет довольно быстро и безболезненно.
AO_
Favicon Kit позволяет получать и встраивать значки, как обычные изображения, размером намного больше 16 пикселей , если они доступны. (Раскрытие: я автор)
AndreasPizsa

Ответы:

235

Вы можете решить эту проблему несколькими способами:

  1. Найдите favicon.icoв корне домена

    www.domain.com/favicon.ico

  2. Ищите <link>тег с rel="shortcut icon"атрибутом

    <link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />

  3. Ищите <link>тег с rel="icon"атрибутом

    <link rel="icon" href="https://stackoverflow.com/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");
охотник
источник
1
GetFavIcon все еще работает? когда я запускаю ваш пример, я получаю ошибку 400
Жюльен
17
похоже, что у Google теперь есть похожий сервис: google.com/s2/favicons?domain_url=stackoverflow.com
hunter
20
если кому-то нужна альтернатива Google, у DuckDuckGo есть другое решение: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio
1
@hunter google.com/s2/faviconsэто иконка с 16x16 ужасная иконка вы знаете где взять иконку побольше?
nideba
1
@JoseSerodio - Ну ... это было первое, что я попробовал, но для области, которую я проверял, я получил "тусклое / тусклое" изображение стрелки, указывающей вправо (больше чем) внутри круга внутри квадрата . Выглядело это так , но я проверил, правильно ли написано "domain.com.ico". Теперь, клянусь чудесами интернета, он работает правильно ... иди и разберись =) Итак, Забудь.
Кевин Феган
19

Обновлено 2020

Вот три услуги, которыми вы можете пользоваться в 2020 году.

<img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />

<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />

<img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />
Blowsie
источник
4
grabicon.com теперь платный сервис по цене от 9 долларов в месяц
janot
1
Еще один: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Мартин Зейтл
Эта служба больше не работает, вы можете использовать api.statvoo.com/favicon/?url=stackoverflow.com . Пользуюсь им пару лет и ни разу не подводил.
AO_
Спасибо @AO_, сейчас я использую duckduckgo, я обновил свой ответ
Blowsie
1
@saintvixalien Я считаю, что это недавно изменилось для людей, которые не инициализируются с помощью ключа API, поскольку серверы перегружаются;) Я использую первичный сервис с ключом API и получаю ответы напрямую, без оболочки. Я тестировал без ключа API, и он перенаправляет на сервис Google, как вы сказали ..
AO_
6

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

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

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

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

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

Марк Гравелл
источник
1
Спасибо, Марк. Я ценю этот пример. Что касается изображений, я не собираюсь изменять их или использовать их для чего-либо, кроме значков в контекстном меню рядом с ярлыком ярлыка.
Стивен Эверс,
4

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

Дорошко
источник
3

Вы можете получить URL-адрес фавикона из HTML-кода веб-сайта.

Вот тег значка:

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

Здесь вам следует использовать регулярное выражение. Если тег не найден, найдите «favicon.ico» в корневом каталоге сайта. Если ничего не найдено, значит на сайте нет значка.

ООО «МММ»
источник
2

Вы можете сделать это без программирования . Просто откройте веб-сайт, щелкните правой кнопкой мыши и выберите «просмотреть источник», чтобы открыть 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 на локальном ПК - и все готово!

Мэтт
источник
1
        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");
pmcilreavy
источник
1

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

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

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

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

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, чтобы вы могли его реконструировать, но имейте в виду, что проверка ответа должна действительно быть готовым (проверка типа файла изображения, пантомимы и т. д.)

Edelwater
источник
1

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

Йенс;)

Йенс
источник
0

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

роботик
источник
0

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

Чтобы получить значок, вы можете связать его по ссылке ... http://g.etfv.co/[URL]

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

Загрузите контент и поехали!

Редактировать :

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

aloisdg переходит на codidact.com
источник
1
Ссылка мертва, ошибка: не найден
tttony
@tttony Действительно. fvicon.com тоже выглядит мертвым. Отредактирую свой комментарий платным контентом. если найдете рабочую бесплатную ссылку, поделитесь ею!
aloisdg переходит на codidact.com
0

Использование jquery

var favicon = $("link[rel='shortcut icon']").attr("href") ||
              $("link[rel='icon']").attr("href") || "";
Вице-президент
источник
0

В 2020 году с помощью сервиса duckduckgo.com из интерфейса командной строки

curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico

пример

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Алекс Ноласко
источник