搭建一个属于自己的随机一言api

xioy
2024-12-06 / 0 评论 / 22 阅读 / 正在检测是否收录...

效果演示

接口

如果你不想自己部署可以直接使用下方由TNT安全团队免费提供的api接口。

https://api.tntsec.com/dit/index.php

参数说明

参数说明
a动画
b漫画
c游戏
d文学
e原创
f来自网络
g其他
h影视
i诗词
j网易云
k哲学
l抖机灵
其他作为动画类型处理

搭建

教程

第一步:创建一个名为dit的文件夹
第二步:然后在dit文件夹下在创建具体分类的文件(每个分类文件中存在对应类型的一言)
第三步:创建一个名为index.php文件,写入以下代码(这个文件就是api)

在dit文件夹下创建了a.txt、b.txt两个文件。假设a文件中放的都是动漫,b文件中放的都是漫画。

默认随机全部一言
随机动漫
随机漫画
地址/index.php
地址/index.php?type=all
<?php
// 设置默认type参数为'all'
$type = isset($_GET['type']) ? $_GET['type'] : 'all';

// 定义文件路径数组,根据type参数选择文件
$files = [
    'all' => ['dit/a.txt', 'dit/b.txt'],
    'a' => ['dit/a.txt'],
    'b' => ['dit/b.txt']
];

// 根据type参数选择文件列表
$selectedFiles = isset($files[$type]) ? $files[$type] : [];

// 检查是否选择了有效的文件
if (empty($selectedFiles)) {
    die('无效参数');
}

// 初始化一个SplPriorityQueue来存储行,优先级用于随机访问
$lineQueue = new SplPriorityQueue();

// 遍历选定的文件,逐行读取内容
foreach ($selectedFiles as $file) {
    if (file_exists($file)) {
        $fileObject = new SplFileObject($file);
        while (!$fileObject->eof()) {
            $line = $fileObject->fgets(); // 读取一行,包括换行符(如果需要可以去掉)
            $line = trim($line); // 去除行首行尾的空白字符,包括换行符
            if (!empty($line)) { // 忽略空行
                $lineQueue->insert($line, rand());
            }
        }
    }
}

// 如果没有读取到任何内容,则输出错误信息并退出
if ($lineQueue->isEmpty()) {
    die('没有任何内容');
}
 
// 正确的随机选择方法(替换上面的SplPriorityQueue部分)
$allLines = [];
foreach ($selectedFiles as $file) {
    if (file_exists($file)) {
        $fileObject = new SplFileObject($file);
        while (!$fileObject->eof()) {
            $line = trim($fileObject->fgets());
            if (!empty($line)) {
                $allLines[] = $line;
            }
        }
    }
}
 
// 随机选择一条内容
if (!empty($allLines)) {
    $randomIndex = array_rand($allLines);
    $randomLine = $allLines[$randomIndex];
    echo $randomLine;
} else {
    die('没有任何内容');
}
?>

资源获取

资源获取:6w条一言
若链接错误或失效,请在下方留言告知!
此处内容作者设置了 回复 可见
3

评论 (0)

取消