有啥方法可以以编程方式从网站 URL 中获取徽标图标?

Posted

技术标签:

【中文标题】有啥方法可以以编程方式从网站 URL 中获取徽标图标?【英文标题】:Any way to grab a logo icon from website URL, programmatically?有什么方法可以以编程方式从网站 URL 中获取徽标图标? 【发布时间】:2012-05-14 11:03:09 【问题描述】:

我正在创建一个活动,我将在其中显示访问过的网站列表及其徽标和用户选择的别名。

例如

最近访问的网站

logo1 网站1/别名

logo2 网站2/别名

.

。所以没有

问题是,(参考附图)如何让网站标志显示在http://的左侧?

【问题讨论】:

【参考方案1】:

使用本网站:

https://besticon-demo.herokuapp.com/allicons.json?url=www.***.com

它会为一个网站找到多种尺寸的所有徽标,并返回一个带有元数据的漂亮 json 字符串,包括图标的 url。您只需将 www.***.com 替换为您的域即可。

如果您愿意,该网站还有一个用于手动输入网站的 gui:

https://besticon-demo.herokuapp.com/

以下是查询堆栈溢出网站返回的示例字符串:


   "url":"www.***.com",
   "icons":[
      
         "url":"http://***.com/apple-touch-icon.png",
         "width":158,
         "height":158,
         "format":"png",
         "bytes":3445,
         "error":null,
         "sha1sum":"c78bd457575a3221c6b3d0d17ffb00ffc63d7cd0"
      ,
      
         "url":"http://cdn.sstatic.net/Sites/***/img/favicon.ico?v=4f32ecc8f43d",
         "width":32,
         "height":32,
         "format":"ico",
         "bytes":5430,
         "error":null,
         "sha1sum":"4f32ecc8f43d0986b9c6ce9f37999e86c0b829ef"
      ,
      
         "url":"http://***.com/favicon.ico",
         "width":32,
         "height":32,
         "format":"ico",
         "bytes":5430,
         "error":null,
         "sha1sum":"4f32ecc8f43d0986b9c6ce9f37999e86c0b829ef"
      
   ]

【讨论】:

@JackFairfield 如何获得此图标并在ImageViewGlide 中显示 网站在 2020 年 8 月出现故障。【参考方案2】:

它被称为 favicon,你所要做的就是:

    如果/favicon.ico 有图标,请使用它。 否则,获取页面内容,从&lt;link rel="shortcut icon" href="<i>URL goes here</i>" /&gt;中提取位置。您需要使用 html 解析器并找到带有 rel&lt;link&gt;iconshortcut icon

【讨论】:

非常感谢您的建议,我会实施并让您知道我的发现。 -最佳 我在为此方法提供的 google url 的帮助下得到了它。 google.com/s2/favicons?domain=www.domain.com 获取 favIcon。仍在努力使背景变得透明,因为其中一些是白色的 BKG,而另一些是黑色的。不确定如何动态处理这些背景。 @minitTech 感谢您的帮助,这让我开始了。 @mask 您的代码正在运行,但是图标变小了您知道如何将图标变大并且不会使网站图标大小崩溃。【参考方案3】:

我知道我迟到了,但这个 API 会帮助其他人

android 不支持网站图标文件。您可以获取 favicon,但不能显示/使用它。

但是 Google 提供了免费的 API 来获取图片格式的网站图标。

https://www.google.com/s2/favicons?sz=64&domain_url=microsoft.com

使用 Picasso 在 imageview 中显示图标。

【讨论】:

这只会在图标设置为 64px 图像时返回一个值,它很容易设置为 16 或 32,而不是一个不知道的值。 这正是我想要的。【参考方案4】:

使用这个logo.clearbit.com/***.com

您甚至可以自定义以获得特定的尺寸和 grascaled 版本

logo.clearbit.com/***.com?size=80&greyscale=true

【讨论】:

【参考方案5】:

此方法可用于获取Favicon Icon位图

 private Bitmap fetchFavicon(Uri uri) 
        final Uri iconUri = uri.buildUpon().path("favicon.ico").build();
        Log.i(TAG, "Fetching favicon from: " + iconUri);

        InputStream is = null;
        BufferedInputStream bis = null;
        try
        
            URLConnection conn = new URL(iconUri.toString()).openConnection();
            conn.connect();
            is = conn.getInputStream();
            bis = new BufferedInputStream(is, 8192);
            return BitmapFactory.decodeStream(bis);
         catch (IOException e) 
            Log.w(TAG, "Failed to fetch favicon from " + iconUri, e);
            return null;
        
    

【讨论】:

在新的API 中,conn.connect 将使应用程序崩溃。你有什么新建议吗? 在做网络操作时总是使用AsyncTask。【参考方案6】:

尝试使用此代码:

imageview1.setImageBitmap(webview1.getFavicon());

【讨论】:

【参考方案7】:

这是一个尝试从 URL 推断徽标图像的 python 库:

https://github.com/dcollien/urlimage

它解析 url 处的 HTML,并尝试了很多事情,包括:

带有 itemprop="image" 或 property="image" 的元标记 元标记 property="og:image:secure_url" 或 property="og:image" 元标记 名称=“推特:图像” Microsoft 磁贴的元标记,带有:name="msapplication-wide310x150logo", name="msapplication-square310x310logo", name="msapplication-square150x150logo", name="msapplication-square70x70logo" 使用 rel="apple-touch-icon" 链接标签 使用 rel="icon" 链接标签 尝试“scheme://domain/favicon.ico”看看它是否存在 否则拉出第一个img标签(在h1旁边)

【讨论】:

以上是关于有啥方法可以以编程方式从网站 URL 中获取徽标图标?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在 Swift 中以编程方式获取所有应用的自动布局约束

有啥方法可以在.NET 中以编程方式添加 HttpHandler?

如何在Swift中以编程方式从另一个图像中剪切徽标的形状(png图像)?

如何获取给定 URL 的高分辨率网站徽标(图标)

我可以为下载的 url 文件使用自定义徽标吗?

如何以编程方式查找网址是电子商务网站还是非电子商务网站?