Typecho 实现评论框自动获取QQ头像和昵称

  • 2020 年 12 月 27 日
  • 74次
  • 309 字
  • 暂无评论

前言

找了许久的关于 Typecho 实现评论框输入 QQ号码自动获取QQ头像和昵称的功能,终于在一个大佬的博客中找到了解决方法,下面废话不多说就开始进入正题吧!

主要核心还是 Ajax去处理,获取到QQ身份的数据信息。


<?php 
// 通过QQ号即可获取用户信息

// 获取QQ头像接口
// http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100&t=1547904810

// 获取QQ昵称接口
// http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins=QQ号

// BY TANKING
// LIKEYUNBA.COM

header('Content-Type: text/html;charset=utf-8');
    $QQ=$_GET["qq"];
    if($QQ!=''){
        $urlPre='http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins=';
        $data=file_get_contents($urlPre.$QQ);
        $data=iconv("GB2312","UTF-8",$data);
        $pattern = '/portraitCallBack\((.*)\)/is';
        preg_match($pattern,$data,$result);
        $result=$result[1];
        $nickname = json_decode($result, true)["$QQ"][6];
        echo "QQ昵称:".$nickname;
        echo "<br/><br/>";
        $headimg = "http://q1.qlogo.cn/g?b=qq&nk=$QQ&s=100&t=1547904810";
        echo "QQ头像:";
        echo "<br/><br/>";
        echo "<img src=\"$headimg\">";
        echo "<br/><br/>";
        $email = $QQ."@qq.com";
        echo "QQ邮箱:".$email;
        echo "<br/><br/>";
        echo "JSON数据:";
        echo "[{\"nickname\":\"$nickname\",\"touxiang\":\"$headimg\",\"email\":\"$email\"}]";
    }else{
        echo "请输入qq号!";
    }
?>

新建一个 get_qq_info.php 文件,代码如下

里面主要是通过qq获取了昵称。


<?php 
header('Content-Type: text/html;charset=utf-8');

$QQ=$_POST["qq"];
if($QQ!=''){
  
$urlPre='http://r.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?g_tk=1518561325&uins=';
$data=file_get_contents($urlPre.$QQ);
$data=iconv("GB2312","UTF-8",$data);
$pattern = '/portraitCallBack\((.*)\)/is';
preg_match($pattern,$data,$result);
$result=$result[1];
$nickname = json_decode($result, true)["$QQ"][6]; 

$geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$QQ;
$qqurl = file_get_contents($geturl);
$str1 = explode('sdk&k=', $qqurl);
$str2 = explode('&t=', $str1[1]);
$k = $str2[0];
if(empty($k)){
$url = '/usr/themes/spzac/img/wu-user.png';
} 
else{ $url = 'https://q1.qlogo.cn/g?b=qq&k='.$k.'&s=100';} 

$aaa =  array('name'=>$nickname,'qqtx'=>$url);
$bbb  =json_encode($aaa);
echo $bbb;
  
}else{
echo "请输入qq号!";
}
?>

下一步

建立js文件,我这里是qqget.js,记得让页面调用


function fn_qqinfo() {
    var qq_num = $('#qqinfo').val();   
    if (qq_num) {
        if (!isNaN(qq_num)) {
            $.ajax({
                url: "/usr/themes/spzac/lib/get_qq_info.php",
                type: "POST",  
                data: {
                    qq: qq_num,                    
                },
                async: true,                          
                dataType: "json",
                success: function(data) {
                    $("#mail").val(qq_num + '@qq.com');
                    $('#comment').focus();
                    if (data == null) {
                        $("#author").val('QQ游客');
                    } else {
                        $("#author").val(data.name == "" ? 'QQ游客' : data.name);
                      $('div.ajax-user-avatar img').attr('src',data.qqtx);
                          
                    }
                },
                error: function(err) {
                    $("#author").val('QQ游客');
                    $("#mail").val(qq_num + '@qq.com');
                    $('#comment').focus();
                }
            });     
          
        } else {            
            $("#mail").val('你输入的好像不是QQ号码');
        }
    } else {
        $("#qqinfo").val('请输入您的QQ号');        
    }
}

这里是通过截取到输入的QQ,然后通过ajax去处理得到相关昵称,邮箱和头像,返回调用,赋予指定的输入框的值

下面是前端的html代码,参考就行了,举一反三,自己配置到自己的页面代码就行了


<div class="input_body qqget_all">              
             <div class="qqget_hasLogin ajax-user-avatar"> <img src="<?php $this->options->themeUrl('img/wu-user.png'); ?>" width="35px" height="35px" class="avatar hasLogin-author  " ></div>               
             <ul class="ident qqget_input">
                    <li><input type="text" class="form-control " name="qqinfo" id="qqinfo" placeholder="QQ号可获取头像和昵称" onblur="fn_qqinfo()" required="required"></li>
                    <li><input type="mail" class="form-control " name="mail" id="mail" placeholder="邮件*" readonly  unselectable="on" value="<?php $this->remember('mail'); ?>"></li>    
                    <li><input  type="text" class="form-control " name="author" id="author" placeholder="昵称*" autocomplete="off" value="<?php $this->remember('author'); ?>" /></li>
             </ul>
             <input type="submit" value="提交评论" class="comment_submit_button c_button">               
</div>

我这里目前是实现在评论框,如果有问题就留言把,也可以将你思路写下来哦~


版权属于:真的二嘉

本文链接:https://52dreamsky.cn/index.php/archives/97/



—— 暂无评论 ——

OωO