有啥方法可以以编程方式从网站 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 如何获得此图标并在ImageView
和Glide
中显示
网站在 2020 年 8 月出现故障。【参考方案2】:
它被称为 favicon,你所要做的就是:
-
如果
/favicon.ico
有图标,请使用它。
否则,获取页面内容,从<link rel="shortcut icon" href="<i>URL goes here</i>" />
中提取位置。您需要使用 html 解析器并找到带有 rel
的 <link>
或 icon
或 shortcut 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?