Вопрос

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

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

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

Есть идеи ?

Это было полезно?

Решение

Вы можете использовать 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.

Вы можете писать запросы в консоли 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%5B@rel%3D%27icon%27%5D%20%7C%20/html/head/link%5B@rel%3D%27ICON%27%5D%20%7C%20/html/head/link%5B@rel%3D%27shortcut%20icon%27%5D%20%7C%20/html/head/link%5B@rel%3D%27SHORTCUT%20ICON%27%5D%22

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

Другие советы

Вот 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' />

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

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

Но для сайта BBC он возвращает немного маленький значок.Сравнивать:

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

После 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 и других поставщиков изображений для сокращения дальнейших итераций при попытке получить значок.

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

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

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

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

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

Измените размер квадрата на 64 пикселя:

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

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

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

ОБНОВЛЯТЬ:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top