标签favicon下的文章

Jerry Bendy 发布于 11月20, 2016

记录 BYI API 站点的一次重写

BYI_API 上线已经两年多了,总计调用量已经超过千万次。虽然名叫 API,但其实和 API 没太大关系,只是一些免费开放使用的辅助接口罢了。两年间共相继开放了 favicon 图标获取、网站首屏截图、短网址、IP 地理位置查询等服务,后来因为维护及服务器原因(个人维护,单台架构,无法承载过多请求,加上被人滥用等)又相继停止了大部分服务,目前仅留了 favicon 获取服务可以正常使用。 网站首屏截图的服务目前没发现国内可用的服务,于是自己写了一套,但这个服务需要抓取目标网站的首页,并在服务器端渲染首页图片,然后再缩小到需要的尺寸,对服务器的开销特别大,于是不得不在开放六个月后关停此项服务。让我决心关停此项服务的最大原因倒不是服务器,而是服务被人滥用。本意是免费开放一项服务可以供一些站长在自己网站中使用,可以...

阅读全文 »

Jerry Bendy 发布于 10月19, 2014

【BYI_API】新版网站Favicon接口上线,快速获取网站Favicon图标

Favicon API

每个网站都应该有一个favicon图片,就是显示在浏览器标题栏上面的小图标,当打开网页或将网页加入收藏时都会显示这个图标。而对于WEB设计或站长来说,可能会希望把某个网站的图标加入到站点名字或链接的前面以为页面增添色彩,同时增加链接的可读性和易用性。

这个接口便是为此功能而生的。通过一种简单、稳定的方式获取网站的Favicon图标。

继今年年初发表的《{% post_link "icewing-blog-support-favicon-server" "冰翼博客开始提供Favicon获取服务" %}》之后陆续收到一些朋友的邮件,对接口的不足和改进提出了一些有用的建议。

新版的Favicon API主要针对上一版本的兼容性不好、获取速度慢等问题进行改进,由原来的单一文件发展为基于CodeIgniter框架的完整应用程序,摒弃文件缓存改用Memcache作为缓存介质,用Opcache加速程序运行,并针对国外被墙网站做了特殊的缓存处理以避免无法访问。(详见Favicon更新历史

新版Favicon接口的调用方式:

<img width="16" height="16" src="http://api.byi.pw/favicon/?url=网址" />

url参数支持HTTP/HTTPS协议,可以是一个HOST地址,也可以是完整的URL字符串。因为好多网站的Favicon图标仍然采用16px*16px的ico图片,并未提供高清的格式,所以在img标签上限制图片尺寸为16x16可以获取最大限度的兼容性(否则可能会造成不同网站的图标大的大小的大~),也要吧使用接口的size参数控制输出的图片大小(截止至发表此博文时该功能还未正式上线)。

具体的参数和使用方法请移步:http://api.byi.pw/favicon

如果在使用过程中有任何问题、意见或建议,欢迎在下面留言或直接邮件/QQ联系我,同时欢迎提供被墙网站或打开速度较慢的网站地址,我会针对这些网站重新建下缓存,以提高响应速度,谢谢!

PS:因为当前接口程序文件和其它接口有交集,并且针对CI框架做出的修改比较多,目前暂时无法开源,后续待当前版本修改稳定后重新整理出来一个版本开源在Github或Coding上,到时会另写一篇文章发布地址。

阅读全文 »

Jerry Bendy 发布于 01月02, 2014

使用PHP获取网站Favicon的方法

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

icetab

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

实际效果请参见示例:

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

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

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

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

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

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

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

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

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

 

阅读全文 »