• 折腾
  • Typecho评论头像调用QQ头像

   Typecho默认头像来自Gravatar,没设置过的头像都很丑(可能是博主不懂欣赏),之前使用的emlog都是基于QQ头像来作为评论头像,但是使用QQ头像的话,会暴露评论者信息,于是博主在百度查了查,刚好又看到了QQ爹博客有一篇:获取QQ头像地址,并且不暴露QQ号 的一篇文章,于是博主就把两种方法结合了一下可以达到使用QQ邮箱的则使用QQ头像并且不会暴露评论者的信息,使用普通邮箱的则使用Gravatar头像。作为一个不懂PHP的小白来说感觉还可以!!!
下面上代码

食用方法

(食用之前请备份)
打开/var/Typecho/Common.php
找到大概在922行

/**
 * 获取gravatar头像地址 
 * 
 * @param string $mail 
 * @param int $size 
 * @param string $rating 
 * @param string $default 
 * @param bool $isSecure 
 * @return string
 */public static function gravatarUrl($mail, $size, $rating, $default, $isSecure = false){    if (defined('__TYPECHO_GRAVATAR_PREFIX__')) {
        $url = __TYPECHO_GRAVATAR_PREFIX__;
    } else {
        $url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';
        $url .= '/avatar/';
    }    if (!empty($mail)) {
        $url .= md5(strtolower(trim($mail)));
    }

    $url .= '?s=' . $size;
    $url .= '&r=' . $rating;
    $url .= '&d=' . $default;    return $url;
}

替换为:

public static function gravatarUrl($mail, $size, $rating, $default, $isSecure = false)
{
        $reg = "/^\d{5,11}@[qQ][Qq]\.(com)$/";
        if (preg_match($reg, $mail)) {
            $img = explode("@", $mail);
            //$url = "//q2.qlogo.cn/headimg_dl?dst_uin={$img[0]}&spec=100";
            $geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$img[0];
            $qquser = file_get_contents($geturl);
            $str1 = explode('sdk&k=', $qquser);
            $str2 = explode('&s=', $str1[1]);
            $k = $str2[0];
            $url = 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';
        } else {
            if (defined('__TYPECHO_GRAVATAR_PREFIX__')) {
                $url = __TYPECHO_GRAVATAR_PREFIX__;
            } else {
                $url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';
                $url .= '/avatar/';
            }
            if (!empty($mail)) {
                $url .= md5(strtolower(trim($mail)));
            }
            $url .= '?s=' . $size;
            $url .= '&r=' . $rating;
            $url .= '&d=' . $default;
        }
        return $url;
}