准备自己做个一言 API,需要一个数据库(单张表格也勉强算是吧 :huaji: )。


呐呐,我跟你讲,通常只有水文里我才会配音乐?

常见的数据库有 SQL 系的 MySQL、MariaDB,微软家的 Access(这个相信大家小学电脑课都折腾过吧 :good: ),以及一些通过 JSON 构建的小众数据库,比如 Lowdb

SQL + PHP 的架构是目前 web 开发最常见的,并且拥有大量相基于二者的开源项目,比如本博客使用的 WordPress。然而 SQL 并没有什么好的的可视化操作工具,对于如此简单的表单数据,其实犯也不上折腾这么麻烦的东西啦 :reluctantly:

Access 作为 Microsoft Office 组件之一,可视化操作自然很方便,但是 web 开发中使用的话需要搭配微软自家的 ASP 作为网站后台脚本语言,而 ASP 通常又得运行在微软家的 IIS 上,据说微软这一套产品性能都很高。然而我服务器并不是 Windows 的,pass。

Lowdb,暂时还不会用...

忽然想到 R 语言里面常用 read.table 函数读取 CSV 表格,何不试试用 PHP 读取呢?

看了一下其实已经有现成的轮子了,PHP 中有 'fgetcsv' 这个函数可以读取 CSV 文件(当然喽你要直接读取 xlsx 文件也不是不行,有个叫 PHPExcel 的 library 就可以)。下面就是我将 CSV 导入到 PHP array 的方法:

// 读取 csv 文件
$file = fopen("hitokoto.csv","r");
// 抽取 csv 第一行,准备作为 key
$headers = fgetcsv($file,0);
// 初始化 array
$data = array();
// 通过 fgetcsv 逐行将抽取 csv 数据写入 array
while ($row = fgetcsv($file,0)) {
    // 将第一行的 key 与 value 对应
    $data[] = array_combine($headers, $row);
}
// 关闭 csv 文件
fclose($file);
// 打印 array
var_dump($data);

fgetcsv 的详细参数可以参考文档。注意在 PHP 5.1.0 之后如果要忽略第二个参数 length 必须将其设为 0,否则报错。Excel 默认导出的分隔符与fgetcsv 默认的分隔符一样都是逗号,所以第三个参数留空即可。

用以上方法做了一个一言接口,下面是食用方法:

接口:https://api.2heng.xin/hitokoto/

可选参数:

参数返回
encode=json返回用unicode转码的json文本
encode=text返回不用unicode转码的json文本
id=x按 id 获取,x ∈ Z⁺

参数添加方法:

第一个参数前面加上 ? 添加至接口后:https://api.2heng.xin/hitokoto/?encode=text

第二个参数与第一个参数用 & 分隔:
https://api.2heng.xin/hitokoto/?encode=text&id=1

如何在网页中调用?参考我的这篇文章

以上的句子大部分是网上的,并不是很满意,以后二刷樱花庄的时候再自己整理吧,计划做成双语版。

Q.E.D.