首先准备一个代码编辑器,然后新建一个 php 文件,命名为 api.php,再新建一个文件,命名为 data.dat(两个文件均需采用 UTF-8 编码,否则会乱码)。
打开 data.dat,在里面贴入要随机显示出来的文本,一行一条。如果你暂时想不出什么比较好的句子的话,害羞我这儿准备了几十条古诗名句,可以直接复制使用:
往者不可谏,来着犹可追。——《论语·微子》
多行不义必自毙。——《左传》
敏而好学,不耻下问。——《论语·公冶长》
避其锐气,击其惰归。——《孙子兵法·军争》
十年树木,百年树人。——《管子·权修》
居安思危,思则有备,有备无患。——《左传》
天时不如地利,地利不如人和。——《孟子·公孙丑》
人谁无过?过而能改,善莫大焉。——《论语》
信言不美,美言不信。——老子
满招损,谦受益。——《尚书·大禹谟》
高岸为谷,深谷为陵。——《诗经·小雅》
天作孽,犹可违,自作孽,不可活。——《尚书》
言之无文,行而不远。——《左传》
三军可夺帅也,匹夫不可夺志也。——《论语·子罕》
天行健,君子以自强不息。——《周易·乾·象》
皮之不存,毛将焉附。——《左传》
路漫漫其修远兮,吾将上下而求索。——屈原《离骚》
长太息以掩涕兮,哀民生之多艰。——屈原《离骚》
人而无仪,不死何为。——《诗经·鄘风》
捐躯赴国难,视死忽如归。——曹植《白马篇》
天下之事常成于困约,而败于奢靡。——陆游
知之者不如好之者,好之者不如乐之者。——《论语·雍也》
志当存高远。——诸葛亮《诫外生书》
不去庆父,鲁难未已。——《左传》
老吾老,以及人之老;幼吾幼,以及人之幼。——《孟子·梁惠王下》
博学之,审问之,慎思之,明辨之,笃行之。——《中庸》
人非圣贤,孰能无过。——《训俗遗规》
亦余心之所善兮,虽九死其犹未悔。——《屈原·离骚》
若要功夫深,铁杵磨成针。——曹学《蜀中广记·上川南道彭山县》
少壮不努力,老大徒悲伤。——汉乐府古辞《长歌行》
穷则独善其身,达则兼济天下。——《孟子·尽心上》
仁者见仁,智者见智。——《易经·系辞上》
青,取之于蓝而青于蓝;冰,水为之而寒于水。——《荀子·劝学》
千羊之皮,不如一狐之腋。——《史记》
余将董道而不豫兮,固将重昏而终身。——《屈原·涉江》
高山仰止,景行行止。——《诗经·小雅·车辖》
锲而舍之,朽木不折;锲而不舍,金石可镂。——《荀子·劝学》
不傲才以骄人,不以宠而作威。——诸葛亮
尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
言必信,行必果。——《论语·子路》
有志者事竟成。——《后汉书·耿列传》
其身正,不令而行;其身不正,虽令不从。——论语·子路
三人行,必有我师焉:择其善而从之,其不善者而改之。——《论语·述而》
非学无以广才,非志无以成学。——《三国·诸葛亮·诫子书》
绳锯木断,水滴石穿。——罗大经《鹤林玉露》
君子坦荡荡,小人长戚戚。——孔子
老当益壮,宁知白首之心;穷且益坚,不坠青云之志。——王勃
尺有所短,寸有所长。——《史记》
他山之石,可以攻玉。——《诗经·小雅·鹤鸣》
苟余心之端直兮,虽僻远其何伤?——《屈原·涉江》
人有不为也,而后可以有为。——《孟子·离娄下》
路漫漫其修远今,吾将上下而求索。——屈原
孔子登东山而小鲁,登泰山而小天下。——《孟子·尽心上》
积土而为山,积水而为海。——《荀子·儒效》
生于忧患,死于安乐。——《孟子·告子下》
知足不辱,知止不殆。——老子
桃李不言,下自成蹊。——《史记》
傲不可长,欲不可纵,乐不可极,志不可满。——魏徵
既来之,则安之。——《论语·季氏》
知己知彼,百战不殆。——《孙子兵法·谋攻》
真者,精诚之至也,不精不诚,不能动人。——《庄子·渔夫》
独学而无友,则孤陋而寡闻。——《礼记·杂记》
勿以恶小而为之,勿以善小而不为。惟贤惟德,能服于人。——刘备
将下列代码复制并粘贴到 api.php 中保存,你的专属“一言” API 就搭建完成了:
// 存储数据的文件
$filename = 'data.dat';
// 指定页面编码
header('Content-type: text/html; charset=utf-8');
if(!file_exists($filename)) {
die($filename . ' 数据文件不存在');
}
$data = array();
// 打开文档
$fh = fopen($filename, 'r');
// 逐行读取并存入数组中
while (!feof($fh)) {
$data[] = fgets($fh);
}
// 关闭文档
fclose($fh);
// 随机获取一行索引
$result = $data[array_rand($data)];
echo $result;
上面的代码是用 fopen + fgets 函数实现的,有些朋友似乎不是特别喜欢,觉得“效率低”。别急,这儿还有个 file_get_contents 函数实现的版本:
// 存储数据的文件
$filename = 'data.dat';
// 指定页面编码
header('Content-type: text/html; charset=utf-8');
if(!file_exists($filename)) {
die($filename . ' 数据文件不存在');
}
// 读取整个数据文件
$data = file_get_contents($filename);
// 按换行符分割成数组
$data = explode(PHP_EOL, $data);
// 随机获取一行索引
$result = $data[array_rand($data)];
// 去除多余的换行符(保险起见)
$result = str_replace(array("\r","\n","\r\n"), '', $result);
echo $result;
上面的代码都是直接在页面中就输出了随机的句子。如果想像一言那样在静态的网页中引用这个 api,该如何实现呢?
很简单,将最后那一行的 echo $result; 换成
echo 'document.write("'.htmlspecialchars($result).'");';
然后在需要的位置用引入 js 的方式进行调用即可。
示例代码: