什么是一言

动漫也好、小说也好、网络也好,不论在哪里,我们总会看到有那么一两个句子能穿透你的心。我们把这些句子汇聚起来,形成一言网络,以传递更多的感动。
简单来说,一言指的就是一句话,可以是动漫中的台词,也可以是网络上的各种小段子。或是感动,或是开心,有或是单纯的回忆。来到这里,留下你所喜欢的那一句句话,与大家分享,这就是一言存在的目的

以上是摘自Hitokoto.cn的介绍。当然一言也可以做很多其他事情,什么毒鸡汤啦,舔狗日记啦,全看你的创造力了。

搭建一言api

在一言API网站根目录内新建index.php文件,并写入以下代码。

<?php
header("Content-type: text/html; charset=utf-8"); //设置编码 utf-8 
//获取句子文件的绝对路径
$path = dirname(__FILE__);
 
//接受type参数
if (isset($_GET['type']) && !empty($_GET['type'])) {
    $type = $_GET['type'];
    $file = file($path."/".$type.".txt");
} else {
    $file = file($path."/hitokoto.txt");
}
 
 
//随机读取一行
$arr  = mt_rand( 0, count( $file ) - 1 );
$content  = trim($file[$arr]);
 
//编码判断,用于输出相应的响应头部编码
if (isset($_GET['charset']) && !empty($_GET['charset'])) {
    $charset = $_GET['charset'];
    if (strcasecmp($charset,"gbk") == 0 ) {
        $content = mb_convert_encoding($content,'gbk', 'utf-8');
    }
} else {
    $charset = 'utf-8';
}

//格式化判断,输出js或纯文本
if ($_GET['encode'] === 'js') {
    echo "function hitokoto(){document.write('" . $content ."');}";
} else {
    echo $content;
}
?>

API使用方法

请求地址为:https: //your-domain/?type=jitang&encode=js


需要将代码和地址中的https://your-domain替换为自己"一言 API"的地址
例如

  • 博客地址为https://example.com
  • hitokoto文件夹位于网站根目录/api文件夹内

那么一言 API的地址为https://example.com/api/hitokoto


参数详解:

  • type:指定文本库文件名,无参数时默认为'hitokoto.txt'
  • encode:赋值为'js'时返回js代码,否则返回文本

示例1:
请求地址:https: //your-domain
返回hitokoto.txt文本库内随机语句。

示例2:
请求地址:https: //your-domain/?type=jitang
返回jitang.txt文本库内随机语句。

示例3:
请求地址:https: //your-domain/?encode=js
返回hitokoto.txt文本库内随机语句,返回形式为js代码。

示例4:
请求地址:https: //your-domain/?type=jitang&encode=js
返回jitang.txt文本库内随机语句,返回形式为js代码。

网页调用

PHP调用方法

添加如下代码到页面头部

<?php $hitokoto = file_get_contents('https://your-domain'); ?>

在需要显示“一言”的标签,插入如下代码:

<?php echo $hitokoto; ?>

JS调用方法

添加如下代码到页面底部;

$.post("https://your-domain/hitokoto", function(hitokoto) {
    $(".content").html(hitokoto);
});

其他——纯js实现一言功能

前端显示代码
注意下 ID 值可以任意设置,调用的时候改下就行:

<div id="quotes" class="quotes"></div>

JS 获取一言函数

var txtUrl = "./js/quotes.txt";        // 一言文本本件(TXT)位置
window.onload = function(){
    getQuotesTxt( 'quotes', txtUrl);       // 获取一言
    window.setInterval( "getQuotesTxt( 'quotes', txtUrl)", 5000);    // 加个定时器自动刷新
}
 
// Text 文本文件中随机获取一行
function getQuotesTxt( id, url) {
    var i = 0,
        resultTxt = "",
        resultArr = [];
        
    if( !url ) { return "TXT 文件路径未设置!"}
    x = fetch(url)
    .then(function(response) {
        return response.text();
    })
    .then(function(text) {
        resultArr = text.toString().split(/[\n]/);          
        i = Math.floor( Math.random()*resultArr.length );
        resultTxt = resultArr[i];                         
        document.getElementById( id ).innerHTML = resultTxt;
    });
}

只需要向函数传递 DOM 元素的 id 属性值及文本文件的 url 地址即可。地址建议改成绝对路径,因为 js 是以调用位置做相对定位的

本文参考来源:
https://blog.imvann.com/6.html
https://blog.quietguoguo.com/3962.html

最后修改:2020 年 05 月 22 日 03 : 32 PM
赏口饭吃,行行好吧,客官!