【接口】获取网站 favicon 图标接口(显图 + 返链)
瞎扯
前段时间站长在开发完善本来快弃坑的 QzSharer 时,想过一个问题:
也就是原本使用的那个自动获取网页标题的按钮是否可以完成其它的动作如获取 description、获取 icon 图标链接。
前者对我来说很容易,简单的一个小爬虫获取头部的 meta 标签就行了;但是后者...我去研究了不少网站,发现关于网站图标的放置方法各种网站有各种想法。在企图自己完成未遂的情况下,我把目光投到了万能的 GitHub 上——心里暗念:『我能行!』
正文
后来经过多方查找,才发现这个功能实现方式(取决于各网站相关标签的呈现位置、方式)太多,统一的太少,所以相关文献也少。说明很多人遇到了和我一样的问题。
一开始,我看中了这个项目:owen0o0/getFavicon,用我的美国虚拟主机搭建刚好,使用上就出了问题:手动输入在浏览器里可用,在 QzSharer 里点击分享后 QZone 却识别不到。
考虑到这是动态网站文件带参数的模式,我给出了以下猜测:这需要调用的动态脚本文件获取到图标后再显示而不是文件,所以不能被识别。
直到今日,我翻看其公开的源代码,从其模块文件中看到如下代码才印证我的猜测:
这里的 data
是二进制数据:
但不是文件直链。
好在,经我测试和翻看文档,我还是发现了这个接口的用途:
获取网站的Favicon图标并显示在你的网页上. ——项目 GitHub 仓库
这对于那些搭建导航网站的站长来说简直就是福利!
接口一 - 获取对应网站图标并显示
如果你是个人站长,愁于获取收录网站的图标,告诉你!:即刻起,你将无需手动获取-保存-再调用,你只需要在相对应的 <img>
标签的 src
属性里填入以下值:
https://api.gkcoll.xyz/api/getFavicon/pic/?url=【你要获取图标的网站网址,最好带上协议头】
接口在有心维护期内将长期有效(现在站长是高中生),相信以后也能坚持下来。
我的使用效果:如图(我的友链申请页),图中被红框标记的是原本有提供图标链接的,但是因为一些原因导致其不能正常显示(估计是用了防盗链),这个时候直接调用本接口加上它们的网址作为图标链接,效果就出来了:
附:其中有些链接还是因防盗链等问题不能通过接口获取,那么这个时候我们可以手动从目标网站源码中提取
rel="icon"
的 link 标签的 href 值(这就是图标链接),在浏览器内打开并另存为保存到电脑上,上传到可访问的图床后再调用。,随后将其重命名为目标网站域名(包括后缀).txt
的格式,再上传到接口源文件的cache
文件夹。
接口二 - 获取对应网站图标链接并打印
这个参考这个开源仓库: perspecdev/getfavicon。此仓库已十一年未更新。
开发者写的自述文件只有一句话:
Just a quick PHP snippet to get the favicon of any website.
使用后有感:确实够 QUICK 的。。
这个就很简答,代码里充斥了不少正则表达式,只为获取并返回那条含有图标的标签的 href
:
使用方法很简单,上面那条中的 pic
换成 link
就是了
https://api.gkcoll.xyz/api/getFavicon/link/?url=【你要获取的网站网址,最好带上协议头】
接口返回的格式是 txt ,只有一行文字内容为图标链接,若你看得懂 Python 代码,可用以下代码进行调用(请先用 pip install requests
命令安装 requests
库):
import reuqests
while True:
api = "https://api.gkcoll.xyz/api/getFavicon/link/?url="
target_url = input("Press the link of target website..")
resp = requests.get(api + target_url)
print(resp.text)
END
希望对你有所帮助!