Как получить фавиконы веб-сайта?

Я использую Ruby on Rails v3.0.9 и хочу получить favicon.ico изображение каждого веб-сайта, для которого я установил ссылку.

То есть, если в моем приложении я установил URL-адрес http://www.facebook.com/, я хотел бы получить значок Facebook и использовать\вставить его на свои веб-страницы. Конечно, я хотел бы сделать это и для всех других веб-сайтов.

Как мне получить favicon.ico значков с веб-сайтов «автоматически» (под «автоматическим» я подразумеваю поиск значка на веб-сайте и получение ссылки на него — я думаю, что нет, потому что нет на всех веб-сайтах есть значок с именем «favicon.ico». Я хотел бы распознать это «автоматически»)?

P.S.: Я хотел бы сделать что-то вроде того, что Facebook делает, когда добавляет ссылку\URL на вашу страницу Facebook: он распознает соответствующий логотип веб-сайта, а затем добавляет его к ссылке\URL.


person Backo    schedule 25.08.2011    source источник
comment
Просто мысль, вы уверены, что это не проблема с авторскими правами?   -  person Johnny5    schedule 25.08.2011
comment
@ Johnny5 - я не знаю этого наверняка, но я не использую значки избранного в качестве логотипа своего веб-сайта (я просто вставляю их на свои веб-страницы), и я думаю, что значки избранного общедоступны.   -  person Backo    schedule 25.08.2011


Ответы (8)


С javascript (jQuery), например: http://jsfiddle.net/aX8T4/

person Francisco Aquino    schedule 25.08.2011
comment
Может ли быть лучший способ использовать jQuery для достижения этих целей? - person Backo; 25.08.2011
comment
К сожалению, это работает только в том случае, если значок находится в корне домена. Некоторые веб-сайты делают что-то подобное: <link href="images/favicon.ico" rel="icon" type="image/x-icon" /> - person fresskoma; 04.07.2012

http://getfavicon.appspot.com/ отлично подходит для получения значков избранного. Просто укажите адрес сайта, и вы получите значок обратно:

http://g.etfv.co/http://www.google.com

person magnushjelm    schedule 06.11.2011
comment
Спасибо. Это единственный ответ, который не предполагает, что значок находится по адресу www.rooturl.com/favicon.ico. - person Arcolye; 25.05.2013
comment
Так как getfavicon закрыт, вот альтернативный способ: https://www.google.com/s2/favicons?domain=stackoverflow.com - person magnushjelm; 12.07.2017

Недавно я написал похожее решение.

Если мы хотим найти URL фавикона, который может быть не только в .ico файле и может быть не в корне, мы должны разобрать html целевого сайта.

В Ruby on Rails я использовал гем nokogiri для анализа html. Сначала мы анализируем все метатеги, где атрибут itemprop содержит ключевое слово image. Это необходимо в ситуациях, когда целевой сайт использует шаблон https://schema.org/WebPage, более современные технологии чем просто тег link.

Если мы его нашли, мы можем использовать атрибут content в качестве URL-адреса фавикона. Но мы должны проверить его на действительное существование URL, просто чтобы быть уверенным.

Если мы не можем найти некоторые метатеги, то ищем стандартные link теги, где атрибут rel содержит ключевое слово icon. Это стандартная ситуация W3C (https://www.w3.org/2005/10/howto-favicon)

И некоторый код моего решения:

require 'open-uri'

def site_icon_link site
    icon_link = nil
    url = nil
    doc = Nokogiri::HTML(open(site))
    metas = doc.css("meta[itemprop*=image]")

    if metas.any? 
        url = metas.first.attributes['content'].value
    else 
        links = doc.css("link[rel*=icon]")
        if links.any? 
            url = links.first.attributes['href'].value
        end
    end

    if url =~ URI::regexp
        icon_link = url
    elsif (site + url) =~ URI::regexp
        icon_link = site + url
    end

    icon_link

end
person Rustery    schedule 05.03.2019

Фавиконы находят двумя способами. Во-первых, существует «жестко запрограммированное» традиционное имя «http://example.com/favicon.ico».

Во-вторых, HTML-страницы могут определять фавикон в своих разделах <head>, <link rel="icon"...> и некоторых других. (Вы можете прочитать статью Википедии о фавиконе)

Таким образом, ваш автомат может получить главную страницу данного веб-сайта, проанализировать ее и проверить, есть ли правильные теги <link>, а затем, в качестве запасного варианта, попробовать «жестко запрограммированное» имя favicon.ico.

person Arsen7    schedule 25.08.2011

Кажется, я пропустил ваш вопрос...

Вы хотите взять значок с другого сайта и сделать его своим?

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

таким образом: www.facebook.com фавикон: www.facebook.com/favicon.ico

возьмите это изображение и сохраните его под именем favicon в своей общей папке.

сделано, этого должно быть достаточно


если вы хотите, чтобы это было динамически, вы можете использовать jquery, но если вы хотите, чтобы это статично, вы можете поместить тег изображения, указывающий на: [корневой URL-адрес веб-сайта]/favicon.ico

вот так: <%= image_tag "#{website.url}/favicon.ico" %>

person Nicos Karalis    schedule 25.08.2011
comment
Никос Каралис, вопрос: вы хотите взять фавикон с другого сайта и сделать его своим? - Ответ: Нет, я хотел бы обратиться к этим значкам для создания HTML-тега изображения. - person Backo; 25.08.2011
comment
Вы имеете в виду построить мозаичное изображение? - person Nicos Karalis; 25.08.2011
comment
Нет, я имею в виду использовать этот значок только для того, чтобы поместить его рядом с названием веб-сайта. Например («[fv]» представляет значок Facebook): [fv] Facebook. - person Backo; 25.08.2011

Разве вы не можете просто использовать обычный тег img с атрибутом src, указывающим на фавикон?

<img src="http://www.facebook.com/favicon.icon">

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

person jdc    schedule 25.08.2011
comment
Я думаю, что нет, потому что не на всех веб-сайтах есть значок с именем «favicon.ico». Я хотел бы распознавать это автоматически. - person Backo; 25.08.2011

Вы можете легко сделать это с помощью гема pismo.

Быстрый пример, чтобы получить URL-адрес фавикона Facebook:

Pismo::Document.new('http://www.facebook.com/').favicon
person NARKOZ    schedule 25.08.2011
comment
Я хотел бы реализовать свой собственный код\решение как можно проще. - person Backo; 25.08.2011
comment
Pismo больше не поддерживается и не позволяет redirect, см. github.com/peterc/pismo /вопросы/15 - person cqcn1991; 09.05.2016

Вот мой рубиновый метод, который удалит конец URL-адреса, добавит фавиконку и создаст тег изображения.

  def favicon_for(url)
    matches = url.match(/[^:\/]\/(.*)/)
    image_tag url.sub(matches[1], '') + '/favicon.ico', {width: '16px', height: '16px'}
  end
person Peter Ehrlich    schedule 18.03.2013
comment
Умно, но веб-сайты очень часто отклоняются от этого шаблона, поэтому его нельзя использовать. - person Arcolye; 25.05.2013