动漫也好、小说也好、网络也好,不论在哪里,我们总会看到有那么一两个句子能穿透你的心。我们把这些句子汇聚起来,形成一言网络,以传递更多的感动。如果可以,我们希望我们没有停止服务的那一天。
简单来说,一言指的就是一句话,可以是动漫中的台词,也可以是网络上的各种小段子。
或是感动,或是开心,有或是单纯的回忆。来到这里,留下你所喜欢的那一句句话,与大家分享,这就是一言存在的目的。
前言
一直以来都用的是 hitokoto.cn 的api(听说在这之前还有hitokoto.us,不过已经挂了很久了~)来作为小站页脚的一个点缀,官方的api文档 写得很详细,调用也比较简单,我也时不时看一看。同时在网络上找了一款比较好看的基于一言的页面:点击查看。另外,这里说一下,还有一个同样很优秀的api:今日诗词,随机返回诗词,并且有很棒的智能推荐机制。
最近闲着没事,于是想自己建一些自用的api,首先想到的就是一言(hitokoto),其实对于这个网上也有不少轮子了,我也只是稍微进行了修改,当然,我这么懒,肯定不会去部署数据库版本的啦(笑
text版本
这是最简易的一个版本的,稍微懂点php的人都会做,实现方法是从一个储存一言数据的文本文件中随机读取并返回到浏览器显示,代码如下:
<title>一言</title>
<?php
//获取句子文件的绝对路径
$path = dirname(__FILE__);
$file = file($path."/hitokoto.txt");
//随机读取一行
$arr = mt_rand( 0, count( $file ) - 1 );
$hitokoto = trim($file[$arr]);
//输出内容
echo $hitokoto;
?>
其中 hitokoto.txt
中的内容可自定义,效果可点击此处查看
javascript版本
javascript版本的实现和文字版本的实现相同,只不过把返回的内容加上 document.write("");
显示了,于是上面的 echo $hitokoto
变成了
echo "function echo_hitokoto(){document.write(\"";
echo $hitokoto . "\");}";
效果可点击此处查看
使用时使用 echo_hitokoto()
就能显示一言了
json版本
json版本略微复杂,不过也是调用最方便的一个版本,我们可以调用返回的json数组中的任意一个值,返回的json效果如下
{
"id": "1318782521000",
"hitokoto": "我发过誓,再也不装作没察觉,再也不逃避。",
"cat": "d",
"catname": "Novel - 小说",
"author": "阎罗小菲",
"source": "文学少女",
"date": "1318782521"
}
其中 hitokoto
就是我们想要的东西啦,当然,也可以加上 source
(来源)。
例子相关的代码在这里:hitokoto本地源
<?php
function hitokoto(){
//获取句子文件的绝对路径
$data = dirname(__FILE__) . '/hitokoto.json';
$json = file_get_contents($data);
$array = json_decode($json, true);
$count = count($array);
if ($count != 0) {
//随机读取一行
$hitokoto = $array[array_rand($array)]['hitokoto'];
echo $hitokoto;
}
else echo '';
}
?>
效果可点击此处查看
集合
都是简单api,部署在不同的接口是很不方便且很不合理的,于是我将它们简单的组合起来,假装是一个api的样子(逃
<?php
$format = $_GET['format'];
switch ($format) {
case 'text':
echo "<title>一言</title>";
$path = dirname(__FILE__);
$file = file($path."/hitokoto.txt");
$arr = mt_rand(0, count($file) - 1);
$hitokoto = trim($file[$arr]);
echo $hitokoto;
break;
case 'json':
case 'JSON':
$data = dirname(__FILE__) . '/hitokoto.json';
$json = file_get_contents($data);
$array = json_decode($json, true);
$hitokoto = $array[array_rand($array)];
echo json_encode($hitokoto, JSON_PRETTY_PRINT);
break;
case 'js':
case 'javascript':
case 'JavaScript':
echo "<title>一言</title>";
$path = dirname(__FILE__);
$file = file($path."/hitokoto.txt");
$arr = mt_rand(0, count($file) - 1);
$hitokoto = trim($file[$arr]);
echo "function echo_hitokoto(){document.write(\"";
echo $hitokoto . "\");}";
break;
default:
header("Location: https://api.spiritx.xyz/yan/?format=text");
break;
}
exit();
?>
之后就只用访问 php文件位置?format=想要的类型
就行了。
Comments | 2 条评论
怎么返回的还是转义字符阿喂!
@千玖夜 为了防止乱码,会先把字符转义成unicode,浏览器请求到数据会自动处理回原文。不过不一定非要转码,在服务端返回页面的时候指定页面编码为utf-8也适用于大部分情况