Typecho实现QQ邮箱识别生成头像地址

typecho调用QQ头像,但是不修改任何核心文件。最近写主题,就顺便研究了一下,这个功能其实很早就想过,比如在会员中心新增QQ的字段而已,但是我发现这样会不可避免的修改typecho的内核,那就和网上给出的修改内核实现的QQ头像方案相同了,这是绝对不行的。所以我想到了另一种方案,那就是对用户的邮箱进行识别,提取出QQ号,但是对非QQ头像的,则显示Gravatar头像库头像。

开干

1.首先,我准备好了两个接口,一个是QQ头像的,一个是Gravatar国内源,它们的调用方式如下。

[greenbar]QQ头像 http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100

Gravatar头像 http://cdn.v2ex.com/gravatar/md5加密后的邮箱?s=100[/greenbar]

以上就是两个头像接口的信息,值得注意的是Gravatar后面的s分辨率参数可以随意定义,而QQ不行,QQ只有几个有限的分辨率,比如100,200,640,其它的数字会报400错误,所以QQ的s参数更像是一种清晰度,宽高还是通过css定义比较好。

2.实现的主要方法,我在模板function.php里面定义,这等于完全舍弃系统的邮箱输出方法。

/** 对邮箱类型判定,并调用QQ头像的实现 */
function isqq($email){
    if($email){
        if(strpos($email,"@qq.com") !==false){
            $email=str_replace('@qq.com','',$email);
            echo "//q1.qlogo.cn/g?b=qq&nk=".$email."&";
        }else{
            $email= md5($email);
            echo "//cdn.v2ex.com/gravatar/".$email."?";
        }
    }else{
    echo "//cdn.v2ex.com/gravatar/null?";
    }
}

上述代码就是通过isqq方法获取邮箱,并且判断是否为qq邮箱,是则截取qq的部分去和qq的接口组合,不是则md5加密该邮箱和gravatar头像库组合,而s的参数则是用户可以自己在模板里面控制的,所以这里省略。

2020年3月9日更新

上面的调用方法忽略了一个问题,就是当别人使用英文QQ邮箱时,例如:wert0814@qq.com,就获取不到QQ号,而是一个字符串,这时候呢,就需要调用Gravatar头像了,如果还是没有Gravatar头像,那就使用默认头像。

更新后代码如下:

function isqq($email)
{
    if ($email) {
        if (strpos($email, "@qq.com") !== false) {
            $email = str_replace('@qq.com', '', $email);
            if(is_numeric($email)){
            echo "//q1.qlogo.cn/g?b=qq&nk=" . $email . "&";
            }else{
                $mmail = $email.'@qq.com';
                $email = md5($mmail);
                echo "//cdn.v2ex.com/gravatar/" . $email . "?";
            }
            
        } else {
            $email = md5($email);
            echo "//cdn.v2ex.com/gravatar/" . $email . "?";
        }
    } else {
        echo "//cdn.v2ex.com/gravatar/null?";
    }
}

3.调用方式,也就是头像链接在不同模板中的调用方式。

文章列表及内容页作者头像

<?php isqq($this->author->mail); ?>s=100

评论列表用户头像

<?php isqq($comments->mail); ?>s=100

当前登录用户头像

<?php isqq($this->user->mail); ?>s=100
打赏
评论区
头像
    头像
    梦华琼英
      

    厉害了,完美解决

      头像
      demo
        
      @梦华琼英

      不错😌

    头像
    169880742
      

    厉害