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

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

例如

  • 最近访问的网站

    logo1 网站1/别名

    logo2 网站2/别名

    .

    。所以没有

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

【问题讨论】:

    标签: java android xml layout webview


    【解决方案1】:

    使用本网站:

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

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

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

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

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

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

    【讨论】:

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

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

    1. 如果/favicon.ico 有图标,请使用它。
    2. 否则,获取页面内容,从&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/stackoverflow.com

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

    logo.clearbit.com/stackoverflow.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旁边)

        【讨论】:

          猜你喜欢
          • 2010-12-24
          • 1970-01-01
          • 1970-01-01
          • 2016-01-28
          • 1970-01-01
          • 1970-01-01
          • 2016-04-23
          • 1970-01-01
          • 2019-12-27
          相关资源
          最近更新 更多