开发者社区> awbeci> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何获取不同网站的favicon默认图标

简介: 参考文章: 1、利用公共api提取任意网站favicon.ico图标 如何读取favicon 根据设置favicon的方式,就有2种读取favicon的方法:   A、默认直接读取网站根目录的favicon.ico文件。
+关注继续查看

参考文章:

1、利用公共api提取任意网站favicon.ico图标

如何读取favicon
根据设置favicon的方式,就有2种读取favicon的方法:
 
A、默认直接读取网站根目录的favicon.ico文件。
B、如果不存在根目录下的favicon.ico文件,就读取页面里favicon的声明。
相比之下,获取网站根目录下的favicon.ico文件是最简单快捷的,但如果网站根目录下没有该文件,就需要使用后台程序读取网页的源代码,非常的麻烦。
 
 
为了克服获取favicon的麻烦,应运而生了一些获取favicon的公共API,如:
 
dnspod:http://statics.dnspod.cn/proxy_favicon/_/favicon?domain=url网址【特别推荐】
google:http://www.google.com/s2/favicons?domain=域名
getFavicon:http://www.getfavicon.org/?url=url地址
g.etfv.co:http://g.etfv.co/url地址
对网络速度而言,dnspod是国内的,快速并且稳定。谷歌的稳定性值得信赖,但因为时常在墙外,而不得不放弃。第3个getFavicon是早期获取favicon的网站,目前已经game over了。第4个也是国外的,也是经常在某些地区无法正常访问。第1和第2个胜出一筹。
 
对于传递参数而言,dnspod和谷歌都是传参域名,第3和第4个是传参url。第3和第4个胜出一筹。
 
总体而言,4个都打成了平手。
 
如此境遇下,我开发了一款获取网站favicon的公共API,只需要在传入网址即可获取图片,目前服务器设置在香港,无国界的访问,可以获取任何网址的favicon。并且,图片具有缓存30天的期限,第2次获取同一个域名(含多级域名)的favicon会更加快速。使用方法也很简单,如:
 
获取百度的favicon
 
http://*/?url=http://www.baidu.com
 
获取谷歌的favicon
 
http://*/?url=http://www.google.com
 
获取facebook的favicon
 
http://*/?url=http://facebook.com
 
获取github的favicon
 
http://*/?url=http://github.com
因流量以及滥用关系,现已经跳转到dnspod服务器的favicon获取方式,请使用该API的朋友尽快迁徙,该API将于今年年底彻底关闭。请使用http://statics.dnspod.cn/proxy_favicon/_/favicon?domain=网站地址 来获取该网站的favicon。
 

2、使用PHP获取网站Favicon的方法

最近做一个Tab需要在网站名旁边显示网站的Favicon以提高显示效果,如图:

icetab开始做的时候想到的是利用Google的方式来获取,使用“http://www.google.com/s2/favicons?domain=网址”的方式可以直接获得网站的Favicon图标并以16*16大小图片的形式显示出来,这个方法简单方便,但在有些网络环境下却会出现图片无法显示的问题(需要FQ),为了解决这个BUG我决定重新写一个获取Favicon的函数,使用自己的服务器以避免FQ。

实际效果请参见示例:

http://favicon.byi.pw/?url=blog.icewingcc.com

如果不想自己写方法的话也可以使用我提供的接口,即“http://favicon.byi.pw/?url=网址”,网址可以带http://前缀。

代码(调用Google的方式,这种方式可以减少代码量,并且速度也比较快):

1 <?php
2 if(isset($_GET['url'])){
3     $icon file_get_contents("http://www.google.com/s2/favicons?domain=" $_GET['url']);
4     if($icon){
5         header('Content-type:image/png');
6         echo $icon;
7     }
8 }

没错,就这几行代码搞定一切 ^_^

这样只要我们使用的服务器能够访问Google就可以正常显示出Favicon,不再受网络环境的影响。

复杂些的方法就是自己写获取函数,这里我只提供思路,就不再写代码了,如果有需要代码可留言,定附上。

一般网站都会把自己的Favicon图标以“favicon.ico”命名并放在网站根目录下,如http://www.baidu.com/favicon.ico。所以可以直接使用PHP函数 file_get_contents()来获取图片内容,设置Header为PNG图片,显示出来即可。

如果根目录没有favicon.ico这个文件的话可以使用file_get_contents或CURL获取网页的内容,使用正则找到“ <link rel=”shortcut icon” href=”..” />”,href里面便是favicon的文件位置,直接获取它的内容即可。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PbootCMS模板如何添加网站浏览器图标 favicon.ico
PbootCMS模板如何添加网站浏览器图标 favicon.ico
55 0
PbootCMS模板如何添加网站浏览器图标 favicon.ico
PbootCMS模板如何添加网站浏览器图标 favicon.ico
88 0
umi打包时favicon.ico图标丢失问题
umi打包时favicon.ico图标丢失问题
160 0
个人网站,有哪些虚拟主机值得购买?
其实我们大部分买空间都是用于个人建站需要的,个人网站建站需求的话,我们该怎么做,需要购买哪些虚拟主机呢?这篇文章就来给大家详细说说。 一般的话个人网站要求无非就这几点:价格要便宜,性能要稳定,访问速度要快,很重要的一点是不需要备案。
3978 0
大型网站架构技能图谱(Java版)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/78991235 ...
581 0
java虚拟机概述
所谓的java虚拟机,就是一台虚拟的机器。它是一款软件,用来执行一系列虚拟计算机指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机。
1064 0
触屏网站如何通过浏览器获取定位,并按照距离远近查询数据
基本思路是这样的: 判断浏览器是否支持获取位置 尝试获取用户地理位置 成功则按照距离远近加载列表 否则按照普通模式加载列表 下面给出JavaScript代码: function loadData(){ if(navigator.
866 0
用JAVA获取视频文件中的帧图片并等比缩放
最近项目中有一个需要用JAVA获取视频文件中的帧图片的场景,之前没有用过JAVA对视频文件进行编辑,于是上网看看有没有现成的方案, 搜索的结果是要用到第三方的工具库,其中有一个是开源的javacv,做过模式识别和图像处理的肯定知道openCV,而javacv就是利用jni封装了 调用openCV中的方法,而且javacv中还封装了对ffmpeg的调用,于是我就决定研究一下怎么用javacv来获取视频中的帧。
2104 0
Java如何获得文件编码格式
在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中文,基于BIG5的繁体中文等等。
712 0
+关注
awbeci
我的名字叫张威(多好听的名字啊),毕业于哈弗大学(之前和比尔&middot;盖次是同学,自从那家伙创立了威软,我和他的关系就不太好,我发誓要打败他,然后进入安徽机电职业技术学院学习软件技术,你们觉得我会成功么), 现在在一家世界五百强公司任职UFO(想问我是什么公司?叫合肥优尔电子科技有限公司
590
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载