获取QQ头像 2.0

看过我博客以前的文章的应该都知道我做过获取QQ头像的说明..但在这里我还是想重新说明一下
由于互联网的发展加快QQ普遍每个人都有至少一个QQ账号,而Gravatar的头像不是每个人都有,而且Gravatar国内访问很慢这是很正常的事情,所以使用QQ的头像成为一个不错的选择

1, QQ头像API接口

接口 https://ptlogin2.qq.com/getface

目前所有百度到的QQ头像接口都会暴露你的QQ让你烦,或让你抓狂所以选择一个好的QQ头像API接口必须的
我这里使用的接口是群里面大佬提供的一个API接口 https://ptlogin2.qq.com/getface 它获取的头像是加密过的头像让你放心使用不用担心QQ号的暴露

使用教程

由于 typecho 是程序使用php搭建的那么这里的教程当然是typecho的啦
现在的接口文件是根据以前的接口来美化的,以前的接口不是很美观显得很臃肿,现在我将使用模块化接口

functions.php

这是第一步 ,由于使用的模块化所以我吧以后要用到的东西也一起写了出来下面是代码
这是一个请求接口 我直接定义成了 Ajax 希望你们看得懂

class Ajax{  // 定义一个请求接口已等待后面使用
    public function get($url, $data = null){
        if ($data != null) {
            $get = "?";
            foreach ($data as $key => $val) {
                $get .= "$key=$val&";
            }
            $url .= $get;
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    }
    public function post($url, $data){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    }
}

下面就是接口处理的代码了这是一个获取头像链接的代码

// 就是将 全数字的QQ邮箱 或 直接使用 QQ号 就可以得到头像的链接 比如 xxx@qq.com 或 xxxx
function QqAvatar($QQ){
    $Ajax = new Ajax(); // 这里将初始化请求接口
    if (!is_string($QQ)) return false;
    $data = preg_match('/^[0-9]+/', $QQ, $val);
    if ($data <= 0) return false;
    if (strlen($val[0]) >= 11)return false;
    $url = "https://ptlogin2.qq.com/getface";
    $data =  array(
        "appid" => 0,
        "imgtype" => 3,
        "uin" => $val[0],
        "tdsourcetag" =>"s_pctim_aiomsg",
    );
    $len = preg_match('/http([\W]|[\w])+[0-9]/',$Ajax->get($url,$data),$val);
    if(intval($len) <= 0)return false;
    preg_match('/t=[0-9]+/',$val[0],$data);
    if(intval(explode("=",$data[0])[1]) == 0)return false;
    return $val[0];
}

上面的内容就是QQ头像的全部方法使用方法的话就是 <?=QqAvatar(QQ号 或 纯数字QQ邮箱); ?>就可以了
但如果里面的内容不是QQ邮箱或者QQ号那么就没头像了吗?下面的代码就是是处理这个问题的了

function Avatar($QQ,$val){
    $data = QqAvatar($QQ);
    if($data == false){
        echo $val;
    }else{
        echo $data;
    }
}

没错就是这个了是不是很简单哪怕你有一点编程的基础都可以看懂的代码,而且这还是模块化的,你可以随自己的想法组装很多东西这里就不说了

总结

一开始我们将定义请求接口 Ajax类 ,然后在定义 QqAvatar() 去调用我们的 Ajax类 获取到的头像链接由于不可能每个人注册使用的 纯数字QQ邮箱那么我们就要 Avatar() 去处理我们是否可以获取到链接

function Avatar($QQ,$val){ // 定义 Avatar(),$QQ 是 qq邮箱 ,$val 就是原本要输出的头像了 
    $data = QqAvatar($QQ); // 这里我们将调用 QqAvatar() 同时传入 qq邮箱 原来获取头像链接
    if($data == false){
        // 如果无法获取到链接我们将输出 $val ,也就是 原来的头像链接
        echo $val;
    }else{
        // 如果获取到了qq头像链接我们将输出qq头像链接 
        echo $data;
    }
}
function QqAvatar($QQ){
    $Ajax = new Ajax();
    if (!is_string($QQ)) return false;
    $data = preg_match('/^[0-9]+/', $QQ, $val);
    if ($data <= 0) return false;
    if (strlen($val[0]) >= 11)return false;
    $url = "https://ptlogin2.qq.com/getface";
    $data =  array(
        "appid" => 0,
        "imgtype" => 3,
        "uin" => $val[0],
        "tdsourcetag" =>"s_pctim_aiomsg",
    );
    $len = preg_match('/http([\W]|[\w])+[0-9]/',$Ajax->get($url,$data),$val);
    if(intval($len) <= 0)return false;
    preg_match('/t=[0-9]+/',$val[0],$data);
    if(intval(explode("=",$data[0])[1]) == 0)return false;
    return $val[0];
}
class Ajax{
    public function get($url, $data = null){
        if ($data != null) {
            $get = "?";
            foreach ($data as $key => $val) {
                $get .= "$key=$val&";
            }
            $url .= $get;
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    }
    public function post($url, $data){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    }
}

新~起航

这个域名我已经申请了三年左右了,对于这个域名我也是有感情了,期初我是想申请 Funny.cn 的当是已经被申请了,于是我就申请了这个Funnyli(李).cn
感谢各位朋友爬虫陪我这么久。

配置升级

服务器重原来的1核1g+1/MB 400m磁盘,升级到了1核2g+5/MB(1T) 40g磁盘真的是可口可乐,可口可乐

主题和数据

由于换了服务器的原因我抛弃了以前的数据,所以各位需要重新的注册一下了
由于放弃数据备份的原因博客主题将会一直持续一个月左右我才会更换,期间我会考虑是否按照以前的框架 ( 指 MDUI ) 做或者抛弃以前的框架重新做 ( 指 IMU )
IMU我已经起草目前就几个样式链接:https://github.com/Funny002/IMU目前我的想法是吧MDUI 的主题完善后在用IMU重新写一个主题

P S ······

就是那个嗯,由于我在上班空闲时间虽然不多但我还是想努力一下...

图片

A30.jpg
A17.jpg
A12.jpg
A23.jpg
A13.jpg