spzac主题免费版默认就支持获取QQ头像,而且很久之前“狗花”说这个头像获取泄露他Q了,我一直懒癌发作没有修正这个问题,前两天修好了,分享出来。

原理

原来的QQ头像获取链接是

https://s.p.qq.com/pub/get_face?img_type=3&uin=扣扣号

最近发现可以通过这个链接来获取QQ头像

https://q1.qlogo.cn/g?b=qq&k=k值&s=100

k值怎么获取呢?

打开下面的地址

http://ptlogin2.qq.com/getface?&imgtype=1&uin=扣扣号

你会发现格式

Header({"扣扣号":"https://thirdqq.qlogo.cn/g?b=sdk&k=k值&s=后面的可以忽略})

通过substr获取k值就行

代码

把下面的代码放到functions.php就可以根据QQ号获取不带QQ号的头像链接。

function getQQAvatar($qqNum) {
    $str = @file_get_contents("http://ptlogin2.qq.com/getface?&imgtype=1&uin=$qqNum");
    $start = strpos($str, '&k=') + 3;
    $end = strpos($str, '&s=');
    $k = substr($str, $start , $end - $start);
    return 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
}

速度改进

然而这两台天我发现获取这个K值非常慢,整体拖慢网页速度,所以决定把头像缓存开起来。

思路

把头像文件存成md5(qq号).jpg
每次请求头像时先判断文件存在不
如果不存在,下载下来。
如果存在,判断是否超过一定时间了(30天),如果是刷新缓存。
这样的话只有吃螃蟹的人会影响浏览体验(PS:可以在别人写QQ邮箱的时候就ajax请求缓存起来,这样就完全没有割裂感)。

完整代码

这里直接给出完整代码吧,把下面的代码放到functions.php里就可以调用了。

此处内容已隐藏,回复后(需要填写邮箱)可见

调用方式

把下面的代码放到需要调用的地方

<?php gravatarUrl(邮箱地址); ?>

如果需要修改头像大小(QQ头像不支持)

<?php gravatarUrl(邮箱地址, 'size=64'); ?>

如果需要更换 Gravatar CDN 地址(别忘了/结尾)

<?php gravatarUrl(邮箱地址, 'prefix=https://gravatar.loli.net/avatar/'); ?>

发表回复

验证码 15 + 41 =

已有 30 条评论

  1. 小李
    广东省东莞市

    回复可见

  2. 梦仙
    广东省云浮市

    测试一下回复可见

  3. dyt5AAUI
    浙江省杭州市

    测试一下回复可见

  4. 沐白
    安徽省阜阳市

    666测试

  5. 呆窝云
    上海市上海市

    测试一下回复可见

  6. eking
    北京市北京市

    测试一下

  7. afa
    吉林省长春市

    看看看

  8. 康华
    湖北省武汉市

    看看

  9. 简单
    山东省莱芜市

    回复可见吐舌

  10. 123
    安徽省滁州市

    太开心

  11. 对对对
    河北省唐山市

    的点点滴滴多多多多多多多

  12. Jethro
    福建省福州市

    感谢分享!

  13. dj360729
    广东省广州市

    测试一下回复可见

  14. Q
    山东省临沂市

    吆西,有是一个不错的代码

  15. cake
    山西省临汾市

    ye测试

  16. bocai
    陕西省西安市

    小白想问具体放在functions.php的哪个位置