Подтвердить что ты не робот

Получить веб-сайт favicon с JS

Мне интересно, можно ли получить значок favicon по URL с помощью JavaScript.

Например, у меня есть URL http://www.bbc.co.uk/, и я хотел бы получить путь к значку, описанному в теге <link rel="icon" .../> - http://www.bbc.co.uk/favicon.ico.

У меня много URL-адресов, поэтому я не должен загружать каждую страницу и искать тег link.

Любые идеи?

4b9b3361

Ответ 1

Вы можете использовать YQL для этого

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://bbc.co.uk/"and%20xpath%3D"/html/head/link[@rel%3D'icon']%20|%20/html/head/link[@rel%3D'ICON']%20|%20/html/head/link[@rel%3D'shortcut%20icon']%20|%20/html/head/link[@rel%3D'SHORTCUT%20ICON']"&format=json&callback=grab

Этот запрос используется Отобразить фиктивные значки Greasemonkey script.

Вы можете писать запросы в консоли YQL, но для этого требуется логин (кстати, без запросов):

http://developer.yahoo.com/yql/console/#h=select%20*%20from%20html%20where%20url%3D%22http%3A//bbc.co.uk/%22and%20xpath%3D%22/html/head/link%[email protected]%3D%27icon%27%5D%20%7C%20/html/head/link%[email protected]%3D%27ICON%27%5D%20%7C%20/html/head/link%[email protected]%3D%27shortcut%20icon%27%5D%20%7C%20/html/head/link%[email protected]%3D%27SHORTCUT%20ICON%27%5D%22

Это лучше, чем http://www.google.com/s2/favicons?domain=www.domain.com , в случае, если favicon существует, но не находится в domain.com/favicon.ico

Ответ 2

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

<!-- Free --> 
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' />
<!-- Paid -->
<img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' />

Ответ 3

Неожиданно я нашел что-то под названием Google Shared Stuff, которое возвращает изображение с веб-сайта favicon по имени хоста:

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

Но Fot BBC сайт, он возвращает favicon немного мала. Для сравнения:

http://www.google.com/s2/favicons?domain=www.bbc.co.uk
http://www.bbc.co.uk/favicon.ico

Ответ 4

После 30.000 до 40.000 тестов я заметил, что вы действительно сталкиваетесь с множеством разных ситуаций, над которыми нужно работать.

Исходной точкой является то, что где-то только посмотреть на тег rel и получить это, но по пути вы найдете все больше и больше ситуаций, которые вам придется покрыть.

В случае, если кто-то посмотрит на эту тему и попытается приблизиться к 100% совершенству, я загрузил здесь свой (PHP) код: https://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php. Это часть плагина WordPress (GPL), который извлекает Favicons, более или менее по запросу в то время, из-за ограничений стандартного Google (как упоминалось выше). В коде обнаружено, что код значительно больше, чем код Google. Но также включает google и другие, как поставщики изображений, чтобы сократить дальнейшие итерации при попытке получить значок.

Когда вы читаете код, вы, вероятно, увидите некоторые ситуации, с которыми вы столкнетесь, например. base64 data uris, пересылать страницы на 404 страницы или перенаправлять gazillion раз, извлекать странные коды состояния HTTP и проверять каждый возможный код возврата HTTP на допустимость, сами значки, которые имеют неправильный тип mime, теги обновления на стороне клиента, значки в корневой папке и никому в коде html и т.д. и т.д. и т.д....

Если вы перейдете в каталог, вы найдете другие классы, которые затем будут хранить фактические значки против их URL-адреса (и, конечно, вам нужно будет выяснить, какие "ветки" используют один и тот же значок, а какие нет, и найти если они принадлежат одному и тому же "владельцу" или действительно являются разными частями, но находятся в том же домене.

Ответ 5

Отказ от ответственности: я сам создал эту услугу, но вы можете попробовать http://grabicon.com. Это очень простой API для favicons, который управляет изменением размера и переформатированием "на лету". Он также использует много активного кэширования для скорости. Как и большинство других подобных сервисов, вы можете вставить это прямо в свой HTML, и он отлично работает. Пока у меня нет онлайн-документации, но вот несколько примеров, в которых используется каждый любимый веб-сайт:

Получить значок в формате PNG:

http://grabicon.com/icon?domain=microsoft.com

Изменить размер до 64 пикселей:

http://grabicon.com/icon?domain=microsoft.com&size=64

Это позволяет отслеживать значок, используя различные методы, которые люди могут реализовать, и использует версию с самым высоким разрешением, поскольку файлы favicon.ico на самом деле содержат коллекцию значков. Он использует эту версию для изменения размера по вашему желанию, если не будет достигнуто идеальное совпадение.

Позвольте мне знать, что вы, ребята, думаете и какие другие функции вам могут понравиться!

UPDATE:

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