是否有被Handsome的时光机功能惊艳到?
它的灵感就来源于微信更新状态至typecho时光机
今天要分享的是Typecho博客对接QQ机器人发表说说

预览地址:[[签到墙]][11]


[vplayer url="https://yun.abcio.cn/abcio/video/typecho-say.mp4" pic="https://yun.abcio.cn/abcio/img/shuoshuo.png" /]

食用方法

1.主题目录新建Ucpage.php文件,把下面代码复制进去
<?php
/**
 * uc page
 *
 * @package custom
 */
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
$this->need('header.php');
?>
<style>
.page-content table{
    margin-bottom: 15px;
    width: 100%;
    min-width: 100%;
    min-height: 110px;
}
    .page-content table tr td{
        position: relative;
    }
    .tra{
        width: 76px;
        max-width: 76px;
        min-width: 76px;
    }
    .page-content table *{
        border: none;
    }
    .tra .divimg{
        display: block;
        width: 50px;
        height: 50px;
        margin: 0;
        position: absolute;
        top: 5px;
        bottom: 0;
        left: 10px;
        right: 0;
        border: 0;
        border-radius: inherit;
        background-size: cover;
        background-repeat: no-repeat;
        background-position: 50% 50%;
        border-radius: 50%;
    }
    .conn::after{
        content: '';
        display: block;
        clear: both;
    }
    .conn img{
        display: block;
    }
    .page-a:before{
        font-family: none;
        content: '';
    }
    .page-a{
        padding: 3px 5px;
    }
    .page-content img{
        max-height: 200px;
    }
</style>


    <div class="layout">
        <div class="page">
            <article class="page-body">
                <div class="page-content">
                    <?php foreach (Sel($_GET["page"]) as $mdi): ?>
                        <table border="1">
                        <tr>
                            <td class="tra" rowspan="2"><div class="divimg" style="background-image:url(<?php echo qqimg($mdi['qq']); ?>)"></div></td>
                            <td><?php echo $mdi['name']; ?></td>
                            <td style="float:right;"><?php echo $mdi['time']; ?></td>
                        </tr>
                        <tr>
                            <td class="conn" colspan="2"><?php echo TiHuan($mdi['txt']); ?></td>
                        </tr>
                    </table>
                    <?php endforeach; ?>
                    <?php sspages(); ?>
                </div>
            </article>
        </div>
    </div>
<?php $this->need('footer.php'); ?>
2.主题目录新建Fun.php文件,把下面代码复制进去
<?php
/**
 * INSERTJSON
 *
 * @package custom
 */
header("Content-Type:text/html;charset=UTF-8");
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
?>
<?php
if(isset($_GET["name"])&&isset($_GET["txt"])&&isset($_GET["qq"])) {
    $r = AddT($_GET["name"],$_GET["txt"],$_GET["qq"]);
    $te;
    if($r==-1) {
        $te = "I don't know that.~~~";
    } else if($r==-2) {
        $te = "It's too long~~~";
    } else if($r==-3) {
        $te = "QQ error";
    } else if($r==-4) {
        $te = "Key error";
    } else {
        $this->response->throwJson(array("ret" => $r , "msg" => $te ));
    }
} else {
    echo '如果你来到了这个页面,那说明我们很有缘,既然这么有缘,那么我就坦白告诉你,这里除了这段话什么都没有';
}
?>
3.在数据库执行下面SQL代码
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `typecho_t` (
  `id` int(11) UNSIGNED NOT NULL,
  `name` char(20) NOT NULL,
  `txt` varchar(255) NOT NULL,
  `qq` char(10) NOT NULL,
  `time` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `typecho_t`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `typecho_t`
  MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=171;
COMMIT;
4.把下面代码复制到function.php文件中
/**************************************************************说说*************************************************************************************************/
//机器人插入说说数据处理
function AddT($name1,$txt1,$qq1) {
    $key = "random";  
//这里是秘钥,对应机器人秘钥
    $txt = trim($txt1);
    //清理空格  
    $txt = strip_tags($txt);
    //过滤html标签  
    $txt = htmlspecialchars($txt);
    //将字符内容转化为html实体  
    $txt = addslashes($txt);
    $txt = urldecode($txt);
    $name = trim($name1);
    //清理空格  
    $name = strip_tags($name);
    //过滤html标签  
    $name = htmlspecialchars($name);
    //将字符内容转化为html实体  
    $name = addslashes($name);
    $name = urldecode($name);
    $qq = trim($qq1);
    //清理空格  
    $qq = strip_tags($qq);
    //过滤html标签  
    $qq = htmlspecialchars($qq);
    //将字符内容转化为html实体  
    $qq = addslashes($qq);
    $qq = urldecode($qq);
    if($key==$_GET["key"]) {
        //判断key是否存在或正确
        if(preg_match('/[1-9]([0-9]{5,11})/', $qq, $matches)) {
            //判断qq号是否规范
            if(mb_strlen($txt,'UTF8')<255) {
                //字符串必须小于255位
                if(strstr($txt, '$')||strstr($txt, '<')||strstr($txt, '>')||strstr($txt, '\"')||strstr($txt, '\'')||strstr($txt, '#')) {
                    return -1;
                    //存在特殊字符
                } else {
                    $db = Typecho_Db::get();
                    $rs = $db->insert('table.t')->rows(array('id' => null, 'name' => $name , 'txt' => $txt , 'qq' => $qq , 'time' => date("Y/m/d") ));
                    return $db->query($rs);
                    //成功
                }
            } else {
                return -2;
                //长度值大于255
            }
        } else {
            return -3;
            //qq错误
        }
    } else {
        return -4;
        //key不正确
    }
}
//获取qq头像并加密qq号
function qqimg($qq) {
    $geturl = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$qq;
    $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';
    return $url;
}
//字符替换把*img和img*替换成<img src=''>
function TiHuan($img) {
    if(strstr($img,"img")) {
        $pagelink=str_ireplace('*img' , "<img src='" , $img);
        $pagelink=str_ireplace('img*' , "'>",$pagelink);
        return $pagelink;
    } else {
        return $img;
    }
}
//查询说说数量-->分页用
function coun() {
    $db = Typecho_Db::get();
    $po=$db->select('table.t.qq')->from ('table.t');
    $pom = $db->fetchAll($po);
    $num = count($pom);
    $shu = 0;
    for ($x=0; $x<$num; $x++) {
        $shu+=1;
    }
    if($shu%10==0) {
        return $shu/10;
    } else {
        return floor($shu/10+1);
    }
}
//说说分页
function sspages() {
    for ($i=0;$i<coun();$i++) {
        echo '<a class="page-a" href="https://www.abcio.cn/uc?page='.($i+1).'">'.($i+1).'</a>';
    }
}
//说说展示
function Sel($pagess) {
    $pa = trim($pagess);
    //清理空格  
    $pa = strip_tags($pa);
    //过滤html标签  
    $pa = htmlspecialchars($pa);
    //将字符内容转化为html实体  
    $pa = addslashes($pa);
    //给每个双引号转义
    $db = Typecho_Db::get();
    $query= $db->select()->from('table.t')->page($pa,10)->order('id',Typecho_Db::SORT_DESC);
    return $db->fetchAll($query);
}
/*************************************************************说说结束*********************************************************************************************/
上面涉及的域名自己替换,秘钥自己随意设置,跟机器人端匹配即可。

代码部分告一段落/ 机器人设置部分如下图:

说说/微语

机器人设置部分

感谢浩瀚大佬技术支持!