HITOKOTO,一个广泛用于各式各样博客的简易API,可以说俨然成为了一些博客的点睛之笔。淡雅的页面风格,配上一段悠扬的音乐,最后再在网页的角落随机附上一段优美的文字,这样的页面设计无不让人拍手称快。当然,一言的API也有自己的问题,由于日渐增长的语库,随机到的一些语录和自己的页面意境显然不搭,这就很难给读者留下好的印象。那么,是否有方法给自己做一个专属一言呢?当然有。这里给出我的一个一言成品——崔氏一言。(尝试一下按F5会出现哪些语句吧!),网站升级了,成品死了!

下面的详细解说也会以崔氏语录作为样例。(感觉,怪怪的。)


首先,想要建一个HITOKOTO,自然就需要足够多的语库,无论是古诗也好,二次元语录也罢,至少也需要两个,不然根本没有随机的必要,不是吗?比如我的崔氏语录,就是以我们高中班主任的口头禅等之类的组成的语库,这个语库可以说凝聚着整个班级的记忆,因而具有很重要的意义。(不过就是一群人玩烂梗罢了)如果只是几句,那么完全可以按照百度一些的教程存储在txt文本当中。但是这只是名句最简单的形式,如果数量庞大,亦或者名句还有相关的出处,那么txt可能不是一个好的选择。这里我们选择MySQL数据来处理这么多的语句。

我们可以写一段PHP代码,将自己的一言数据库所有内容都输出到页面中,代码如下,样例可以在这里查看。

<?php
    include("数据库.php");
    $dbname="Class20";
//数据库名
    $mysqli=new Mysqli($servername,$username,$password,$dbname);
//数据库链接的一些参数,这些变量应该包含在数据库.php中以提高安全性
    $mysqli->query("set names utf8");
    $table="崔氏语录";
//选择数据库中的表
    if($mysqli->connect_error)
    {
        die("连接失败".$mysqli->connect_error);
    }
    echo "<table>";
    echo "<tr>";
    echo "<th>序号</th><th>内容</th>";
    echo "</tr>";
//这段表格设置按照数据库的具体形式来实现
    getele();
    function getele()
    {
        global $table;
        global $mysqli;
        $sql="select * from $table";
//从表中选取任意的记录字段
        $res=$mysqli->query($sql);
        while($row=$res->fetch_row())
//只要没有将遍历完就继续
        {
            echo "<tr>";
            foreach($row as $key=>$val)
            {
                echo "<td><b>$val</b></td>";

            }
            echo "</tr>";
        }
//表格每行的形式
        echo "</table>";
        $res->free();
    }
?>

有了以上的知识,那么一言的形式就很简单。我们的目标就是从数据库的表中随机抽取一条记录充当一言罢了,这里给出代码如下。

<?php
    $output="";
    include("数据库.php");
    $dbname="Class20";
    $conn=mysqli_connect($servername,$username,$password,$dbname);
    if(!$conn )
    {
        die('连接失败: ' . mysqli_error($conn));
    }
    mysqli_query($conn , "set names utf8");
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }
    $table="崔氏语录";
    $sql="SELECT 语句 FROM $table AS t1 JOIN (SELECT ROUND(RAND()*(SELECT MAX(序号) FROM 崔氏语录)) AS id) AS t2 WHERE t1.序号>=t2.id ORDER BY t1.序号 LIMIT 1;";
//这段SQL语句就是从表中随机选取一条记录
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
    // 输出数据
        while($row = $result->fetch_assoc()) {
            $output=$row["语句"];
//将记录中的语句赋值给output变量
        }
    }
    mysqli_close($conn);
?>

那么之后显示的页面代码应该如下

&lt;?php
    include(&quot;上面的代码.php&quot;);
//将上面的PHP包含到显示页面中,当然也可以选择将两块合在一起,但是为了作为其他项目的接口,建议还是分开代码
    echo &quot;&lt;p&gt;$output&lt;/p&gt;&quot;;
//输出
?&gt;

之后再对输出的格式进行调整、美化,最后就会变成一个美观的HITOKOTO界面,当然,还可以把这个作为一个接口应用到其他地方,至于具体应用的场所就因人而异了。


实验性个人一言(ひとこと/HITOKOTO)制作
https://Mundnaity.moe/post/Make-Your-Own-Hitokoto
作者
Mundanity Fan
发布于
2020-08-11
许可协议