如何检索网站favicon?

时间:2011-08-25 13:22:01

标签: ruby-on-rails ruby ruby-on-rails-3 image favicon

我正在使用Ruby on Rails v3.0.9,我想检索我为其设置链接的每个网站的favicon.ico图像。

也就是说,如果在我的应用程序中我设置了http://www.facebook.com/ URL我想要检索Facebook'图标并在我的网页中使用\ insert。当然,我也想对所有其他网站也这样做。

如何以“自动”方式从网站检索favicon.ico图标(使用“自动”我的意思是在网站中搜索图标并获取指向它 - 我认为没有,因为并非所有的网站都有一个名为'favicon.ico'的图标。我想以“自动”方式识别它?

P.S。:我想做的是像Facebook一样在Facebook页面中添加链接\ URL:它识别相关的网站徽标,然后将其附加到链接\ URL。

8 个答案:

答案 0 :(得分:3)

http://getfavicon.appspot.com/非常适合获取favicon。只要给它网站的网址,你就会得到最爱的网站:

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

答案 1 :(得分:1)

通过两种方式找到了喜爱者。首先,有一个'hardcoded',传统名称为`http://example.com/favicon.ico'。

其次,HTML页面可以在<head>部分中定义favicon,按<link rel="icon"...>和其他一些部分。 (您可能需要阅读Wikipedia article about favicon

因此,您的自动贩卖机可以获取指定网站的主页,解析它并检查是否有正确的<link>标记,然后,作为后备,尝试“硬编码”favicon.ico名称。

答案 2 :(得分:0)

我想我错过了你的问题......

你想从其他网站上获取一个网站图标并将其制作成你的网站吗?

如果这是您想要的,您可以直接从主页图标中获取并将其保存在公共文件夹中。

因此:www.facebook.com favicon:www.facebook.com/favicon.ico

拍摄该图像并在公共文件夹中使用名称favicon保存

完成它应该足够了


如果你想要它dinamicaly你可以使用jquery,但如果你想要静态你可以把图像标签指向:[网站的根网址] /favicon.ico

像这样:<%= image_tag "#{website.url}/favicon.ico" %>

答案 3 :(得分:0)

你不能只使用一个指向favicon的src属性的常规img标签吗?

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

这假定浏览器将.ico文件识别为图像。帮助方法也可能适用于此。

答案 4 :(得分:0)

您可以使用pismo gem轻松完成。

获取Facebook的网站图标的快速示例:

Pismo::Document.new('http://www.facebook.com/').favicon

答案 5 :(得分:0)

使用javascript(jQuery),如下所示:http://jsfiddle.net/aX8T4/

答案 6 :(得分:0)

这是我的ruby方法,它将剥离URL的结尾,附加favicon,并生成图像标记。

  def favicon_for(url)
    matches = url.match(/[^:\/]\/(.*)/)
    image_tag url.sub(matches[1], '') + '/favicon.ico', {width: '16px', height: '16px'}
  end

答案 7 :(得分:0)

最近我写了一些类似的解决方案。

如果我们要查找收藏夹URL,则它不仅可以是.ico文件,而且可以不在根目录中,我们应该解析目标站点html。

在Ruby on Rails中,我使用nokogiri gem进行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