PHP实现百度文心一言接口的自定义过滤与校验处理

一、了解百度文心一言接口

1.1 什么是百度文心一言接口

百度文心一言接口是一个提供随机语录的开放接口,包含励志、动画、漫画、游戏、小说等多种类型的语录。我们可以通过请求该接口获取一句语录并展示在网页上。

1.2 接口请求地址

接口请求地址为:https://api.wenxinlingdu.com/yiyan/api.php

1.3 请求参数

请求参数主要包括:

type:语录类型

charset:返回编码

encode:请求编码

例如,请求一句励志语录的地址为:

https://api.wenxinlingdu.com/yiyan/api.php?charset=utf-8&encode=json&type=lx

二、使用PHP获取文心一言接口随机语录

2.1 发送请求获取随机语录数据

为了从文心一言接口获取随机语录,我们需要先发送HTTP请求。在PHP中,我们可以使用cURL函数库发送HTTP请求。cURL库支持多种协议,包括HTTP、HTTPS、FTP等。它还支持POST、COOKIE、认证、代理等一系列功能,非常强大。

以下是使用cURL函数向文心一言接口发送GET请求,并获取返回数据的基本操作代码:

$url = 'https://api.wenxinlingdu.com/yiyan/api.php?charset=utf-8&encode=json&type=lx';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);

if(curl_errno($ch)){

// 发生错误时打印错误信息

echo 'Error:'.curl_error($ch);

}

curl_close($ch);

echo $response;

在这段代码中,我们首先定义了要请求的文心一言接口地址$url,然后使用curl_init()函数初始化一个cURL会话。接下来,使用curl_setopt()函数设置相关参数,包括请求的URL、返回结果是否要输出等。最后,使用curl_exec()函数发送请求并获取返回结果。如果请求失败,我们使用curl_errno()函数获取错误码并将错误信息打印出来。

2.2 请求参数的过滤与校验处理

在请求文心一言接口时,我们需要传递一些参数,如请求的语录类型、返回编码等。但在传递这些参数之前,我们需要对它们进行过滤和校验处理,以确保参数的合法性和安全性。

对于字符型参数,我们需要判断其长度和格式是否符合要求,例如:

<?php

function checkType($type){

// 判断类型是否为空

if(!$type){

return '类型不能为空!';

}

// 判断类型长度是否符合要求

if(strlen($type) > 2){

return '类型长度不能超过2个字符!';

}

// 判断类型是否为预定义类型

$types = array('lx', 'dy', 'my', 'rm', 'xs', 'gc', 'yl', 'ys', 'qt');

if(!in_array($type, $types)){

return '不支持的类型!';

}

// 参数合法,返回null

return null;

}

?>

在这段代码中,我们定义了一个checkType()函数,用于对传入的类型参数进行过滤和校验处理。首先,我们判断该参数是否为空;然后,我们判断其长度是否超过2个字符;最后,我们判断其是否为预定义类型之一。如果三个条件都不满足,则返回null,表示该参数合法。

对于数字型参数,我们需要判断其是否为数字,以及是否在合法范围内,例如:

<?php

function checkNum($num){

// 判断参数是否为空

if(!$num){

return '参数不能为空!';

}

// 判断参数是否为数字

if(!is_numeric($num)){

return '参数不是数字!';

}

// 判断参数是否在合法范围内

if($num < 0.1 || $num > 1){

return '参数应在0.1-1之间!';

}

// 参数合法,返回null

return null;

}

?>

在这段代码中,我们定义了一个checkNum()函数,用于对传入的数字型参数进行过滤和校验处理。首先,我们判断该参数是否为空;然后,我们判断其是否为数字;最后,我们判断其是否在合法范围内。如果三个条件都不满足,则返回null,表示该参数合法。

三、自定义过滤与校验处理

3.1 对返回结果进行校验处理

在获取文心一言接口返回结果后,我们还需要对其进行校验处理,以确保返回结果的数据格式正确且不包含恶意代码。

以下是对返回结果进行校验处理的基本操作代码:

$result = json_decode($response);

if(!$result){

echo '返回结果为空或格式不正确!';

exit;

}

if(isset($result->code)){

echo '返回结果中包含错误代码:'.$result->code.','.$result->msg;

exit;

}

if(isset($result->result) && !$result->result){

echo '返回结果中的result字段为空!';

exit;

}

在这段代码中,我们首先使用json_decode()函数将返回结果转换成JSON格式对象,然后判断是否为空或格式不正确。接下来,如果返回结果中包含错误代码,则将错误代码和错误信息打印出来;如果返回结果中的result字段为空,则提示返回结果异常。

3.2 定义自定义过滤与校验函数

在上一节中,我们对接口返回结果进行了基本的校验处理。但不同的API接口返回的结果可能存在差异,因此我们需要定义自定义过滤与校验函数以适应不同的API接口。

以下是定义自定义过滤与校验函数的基本操作代码:

$url = 'https://api.wenxinlingdu.com/yiyan/api.php?charset=utf-8&encode=json&type=lx';

$type = 'lx'; // 语录类型

$charset = 'utf-8'; // 返回编码

$encode = 'json'; // 请求编码

$num = 0.6; // 概率值

// 参数校验

if($error = checkType($type)){

echo $error;

exit;

}

if($error = checkNum($num)){

echo $error;

exit;

}

// 发送HTTP请求

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);

if(curl_errno($ch)){

echo 'Error:'.curl_error($ch);

exit;

}

curl_close($ch);

// 对返回结果进行校验处理

if(!$result = my_filter($response)){

echo '返回结果为空或格式不正确!';

exit;

}

if(isset($result->code)){

echo '返回结果中包含错误代码:'.$result->code.','.$result->msg;

exit;

}

if(isset($result->result) && !$result->result){

echo '返回结果中的result字段为空!';

exit;

}

// 自定义过滤与校验函数

function my_filter($response){

$result = json_decode($response);

if(!$result){

return false;

}

return $result;

}

在这段代码中,我们首先定义了一些接口请求参数,包括语录类型、返回编码、请求编码、概率值。接下来,我们对参数进行了校验处理,如果存在异常,则打印错误信息并退出;否则,我们发送HTTP请求并获取返回结果。最后,我们使用自定义过滤与校验函数my_filter()对返回结果进行处理。在my_filter()函数中,我们首先使用json_decode()函数将返回结果转换成JSON格式对象,然后判断是否为空或格式不正确。如果结果正确,则返回该结果对象;否则,返回false。

四、结语

在PHP中使用百度文心一言接口获取随机语录,需要实现参数的过滤与校验、HTTP请求发送和返回结果处理等多个步骤。在实际开发中,我们需要根据不同的接口定义不同的过滤与校验函数,并进行相关的异常处理,以确保接口请求的正确性和安全性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签