经过访问cn.gravatar.com多次未果,于是了解到国内它的镜像站,可以更快速的获取头像(但我还是没有官网账号),以及通过QQ号得到QQ头像[1]。虽然这篇文章给出了一位开发者的github链接[2],但是经过查看源码,并未发现实现QQ头像获取的功能,并且因为很久没有维护,code里支持的某一个镜像也失效,因此我便稍微修改一下,不要在意效率。
镜像源
首先是修改失效的镜像,将第52行code修改为
'https://cdn.v2ex.com/gravatar/' => '国内镜像 ( https://cdn.v2ex.com/gravatar/ )'),
其中56行之后的那一堆默认头像的地址可以选择性修改一下。
QQ头像
然后参考了一篇文章[3],得到了从qq号获取头像地址的php代码。因为上面这个插件涉及到返回头像地址的功能,所以直接在这个插件里动刀。那么就通过检测邮箱中的QQ号来得到头像吧。
首先在gravatarUrl
函数的起始位置添加一个判断,是否邮箱为qq号形式的邮箱[4]:
// 检测是否是数字类型的QQ邮箱
preg_match('/^\d{4,11}@qq\.com$/i', $mail)
如果是的话,会返回真,否则为假。
接下来当返回为真的时候令函数直接返回QQ头像地址:
if (preg_match('/^\d{4,11}@qq\.com$/i', $mail))
{
$qq = substr($mail, 0, -7);
$geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$qq;
$qquser = file_get_contents($geturl);
$str1 = explode('&k=', $qquser);
$str2 = explode('&s=', $str1[1]);
$k = $str2[0];
$qqimg = 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
return $qqimg;
}
以上是功能的大致实现,具体修改请参照提供下载的插件源码。因为对PHP语言不了解,所以并不确定这种方法是否最佳,修改后的插件仅供参考:GitHub
限制
需要用户邮箱设置为由QQ号组成的的QQ邮箱账号。
参考链接:
- https://handsl.cn/338.html
- https://github.com/LT21/GravatarServer
- https://qqdie.com/archives/get-qq-avatar-no-qq-number.html
- https://www.n-1.cn/32.html