QQ 数字邮箱通过 K 码获取 QQ 头像

可以通过 PHP 判断,让博客留言使用 QQ 数字邮箱的用户直接显示 QQ 头像,不过 QQ 提供显示头像的方法有两种,一种直接显示 QQ 号码,这个暴露留言者的个人隐私信息不好,还有一种是通过 QQ 提供的 API,将 QQ 号转换为 K 码,能更好的保护留言者隐私。

如果这 K 码不能逆推的话,反正我是看不懂是啥。

提取 K 码头像地址

1
2
3
4
5
6
7
8
9
10
11
$mailLower = strtolower($mail);
$reg='/^([0-9]{5,11})@qq.com$/';
if(preg_match($reg,$mailLower)){
$qq = str_replace('@qq.com', '', $mailLower);
$qqapi = 'https://ptlogin2.qq.com/getface?&imgtype=1&uin='.$qq;
$qquser = file_get_contents($qqapi);
$str1 = explode('sdk&k=', $qquser);
$str2 = explode('&s=', $str1[1]);
$k = $str2[0]; //获取到的 K 码
$avatar_link = '//q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
}

QQ 好像只提供 100 和 40 两种大小的头像格式,其他大小都是 404。

K 码头像问题

因为代码中通过 QQ API 地址,用 file_get_contents 获取内容,本地测试会导致网站打开速度变慢,也不知道是这个函数慢,还是 QQ API 打开的慢。

如果有其他方法获取 K 码,就能避开这个影响速度的问题了。

经过老司机线上测试,貌似不影响速度……