1. 什么是百度文心一言接口?
百度文心一言是一个提供一句话诗词的API接口,包含古诗词、现代诗词、歌词等,可以通过调用API获取到一句话诗词,非常适合用于网站、APP等界面的美化。
$url = "https://v1.hitokoto.cn/";
$response = file_get_contents($url);
$response = json_decode($response);
$content = $response->hitokoto;
这是获取参数的接口链接,其中包括的信息有:hitokoto - 获取到的句子,from - 句子的出处,creator - 句子的作者。
2. 异步回调的实现
2.1 异步回调原理
异步回调指的是一个调用的过程中,将处理结果保存下来,而不是立即处理返回结果。在需要该结果的时候再取出结果处理。它与同步回调的区别在于,同步回调是在调用过程中等待函数返回结果然后进行处理的。
异步回调的优点在于可以提高系统的吞吐能力,因为异步回调不需要等待函数返回结果,在等待结果的时候,可以处理其他请求,提高了系统资源的可用性。
2.2 实现异步回调的方法
我们可以使用PHP的cURL(Client URL)函数,来实现异步回调的功能。cURL是一个强大的工具,可以用于与服务器之间的数据交互,比如:发送get、post请求,接收api返回的数据。
使用cURL时,我们可以使用curl_setopt()方法,设置参数,比如:超时时间、Post请求要提交的数据、SSL验证等等。
下面是一个例子,实现了一个异步回调的功能,当一个post请求被发出时,即使服务端在处理post请求的时候没有处理完全,客户端依然可以继续执行下面的代码,不需要等待服务端返回结果。
function post_async($url, $params)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
$params = array('url' => 'http://example.com', 'data' => 'hello world');
post_async('http://example.com/post_api', $params);
echo '异步回调处理中...';
2.3 实现异步回调的代码
为了实现异步回调,我们可以通过创建一个PHP的文件,在这个文件中访问百度文心一言API获取到一句话诗词,并将结果保存在某个数据库表中。
然后,我们可以在需要显示这个诗词的页面中,异步地访问这个数据库表,将结果输出到页面上。
下面是异步回调的代码实现过程:
创建一个PHP文件,用于向百度文心一言API发送请求,并将获取到的数据保存在数据库中,例如:hitokoto_api.php。
$url = "https://v1.hitokoto.cn/";
$response = file_get_contents($url);
$response = json_decode($response);
$content = $response->hitokoto;
$mysqli = new mysqli('localhost', 'user', 'password', 'db');
$mysqli->query("SET NAMES 'utf8'");
$mysqli->query("INSERT INTO `rand_poem` (`content`)
VALUES ('" . $mysqli->real_escape_string($content) . "')");
$mysqli->close();
在需要显示诗词的页面中,使用jQuery的.ajax()方法异步请求数据库中保存的诗词数据并将其输出到页面上,例如:index.php。
<div id="poem"></div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$.ajax({
url: "get_poem.php",
success: function(result){
$("#poem").html(result);
}
});
</script>
创建一个PHP文件,用于从数据库中获取一句话诗词,例如:get_poem.php。
$mysqli = new mysqli('localhost', 'user', 'password', 'db');
$mysqli->query("SET NAMES 'utf8'");
$query = $mysqli->query("SELECT * FROM `rand_poem` ORDER BY RAND() LIMIT 1");
if ($query->num_rows > 0) {
$result = $query->fetch_assoc();
echo $result['content'];
} else {
echo "获取诗词失败!";
}
$mysqli->close();
3. 总结
通过以上方法,我们可以实现异步回调获取一句话诗词,并将其展示在页面上,提高系统资源的利用率,同时也可以给网站或APP添加一些小功能,提高用户体验。