标注:
1、gmstrftime(“%a, %d %b %Y %T %Z”,time()) 获取RFC1123格式时间
2、 hash_hmac(“sha256”, $signature, $this->ApiSecret,true) 二进制的hmac_sha256加密
3、生成的url后面有三个参数
1.authorization通过一系列的加密获得
2.date这个参数需要url加密
3. host 这个参数我写死的
<?php
echo "<pre>";
$text= '<h1>
作者:小飞飞,撰写于6月31日。
</h1>
<p>
<br />
</p>
<span style="color:#E53333;">想当年</span>,<span style="background-color:#E53333;">他所带领的军</span>队以锐不可<u>挡之势,</u>横扫大江南北,可以说是在父兄基业上既往开来,成就了一番伟业。原本偏安一隅的小国,从他的手中变成了十三个州,国人对这位领袖的敬意由然而生。威望的增加、权利的扩张丝毫没有改变他原有的样样子,他迈步走进岳楼,回忆起在湖北省张家界市的一段往事。那是一个薄雾蒙蒙的清晨,在急促行军途中他与一位素未谋面的人相逢,虽然之后并没有太多故事,却至今难以忘却,正当他的思绪陷入过往,忽然一阵震天的马蹄声夹杂着士兵的喧闹传来,报:“敌人来袭,我方战线危机,望将军火速驰援”。由于刚刚陷入过往的原因,他稍微愣了愣神,咆哮道:“大军听令,即刻出发”!军令如山。成群的士兵迅速从营房中跑出在校场上整齐队列,方阵如虹、战马昂首、刀枪如林、战旗迎风飘扬,将士身上的盔甲在阳光照射下,闪耀着金属的光泽。看着这支曾跟着他南征北战的队伍,他默默翻身登上战马,走在队伍最前面。营房外的道路两旁站满了欢送的百姓,大家希望将军能带领着军队,再次创造奇迹。<br />
<div style="text-align:right;">
太阳当空照,花儿对我笑,小鸟说早上好啊,真是画蛇天足
</div>';
// $text="
// 作者:小飞飞,撰写于6月31日。
// 想当年,他所带领的军队以锐不可挡之势,横扫大江南北,可以说是在父兄基业上既往开来,成就了一番伟业。原本偏安一隅的小国,从他的手中变成了十三个州,国人对这位领袖的敬意由然而生。威望的增加、权利的扩张丝毫没有改变他原有的样样子,他迈步走进岳楼,回忆起在湖北省张家界市的一段往事。那是一个薄雾蒙蒙的清晨,在急促行军途中他与一位素未谋面的人相逢,虽然之后并没有太多故事,却至今难以忘却,正当他的思绪陷入过往,忽然一阵震天的马蹄声夹杂着士兵的喧闹传来,报:“敌人来袭,我方战线危机,望将军火速驰援”。由于刚刚陷入过往的原因,他稍微愣了愣神,咆哮道:“大军听令,即刻出发”!军令如山。成群的士兵迅速从营房中跑出在校场上整齐队列,方阵如虹、战马昂首、刀枪如林、战旗迎风飘扬,将士身上的盔甲在阳光照射下,闪耀着金属的光泽。看着这支曾跟着他南征北战的队伍,他默默翻身登上战马,走在队伍最前面。营房外的道路两旁站满了欢送的百姓,大家希望将军能带领着军队,再次创造奇迹。
// 太阳当空照,花儿对我笑,小鸟说早上好啊,真是画蛇天足";
$index=new index;
$zz=$index->authenticate($text);
echo $zz;die;
// pol 政治术语纠错 [位置,原词,结果词,类型]
// char 别字纠错 [位置,原字,结果字,类型],
// word 别词纠错 [位置,原词,结果词,类型] 。
// redund 语法纠错-冗余 [位置,原文本,纠错后文本,类型] 。
// miss 语法纠错-缺失 [位置,原文本,纠错后文本,类型]
// order 语法纠错-乱序 [位置,原文本,纠错后文本,类型] ,其中【类型】中的lx_word代表词级别乱序纠错、lx_char代表字级别乱序纠错。
// dapei 搭配纠错 [位置,原文本,纠错后文本,类型]
// punc 标点纠错 [位置,原文本,纠错后文本,类型]
// idm 成语纠错 [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的idm-成语纠错。
// org 机构名纠错 [位置,原文本,纠错后文本,类型]
// org_R:机构名字词冗余
// org_M:机构名字词缺失
// org_S:机构名字词错误
// org_N:机构名称变更
// org_P:机构名字词乱序
// addr 地名纠错 [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果);【类型】:addr_R-地名字词冗余、addr_M-地名字词缺失、addr_S-地名字词错误
// leader [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的lea代表领导人职称纠错。
// number 数字纠错 [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】可能的值如下:
// time:时间纠错
// date-m:日期纠错(月份)
// date-d:日期纠错(日)
// name 全文人名纠错 [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果);【类型】:name-全文人名纠错
// grammar_pc 句式杂糅&语义重复
class Index
{
protected $type=[
"black_list"=>"黑名单纠错",
"pol"=>"政治术语纠错",
"char"=>"别字纠错",
"word"=>"别词纠错",
"redund"=>"语法纠错-冗余",
"miss"=>"语法纠错-缺失",
"order"=>"语法纠错-乱序",
"dapei"=>"搭配纠错",
"punc"=>"标点纠错",
"idm"=>"成语纠错",
"org"=>"机构名纠错",
"addr"=>"地名纠错",
"grammar_pc"=>"句式杂糅&语义重复",
];
/*
* */
public function authenticate($text){
$Base=new Base;
//去除html标签
$text= $this->removeHtml($text);
//生成接口url
$url= $Base->produceurl();
//生成请求参数
$postfields= $Base->producepostfields($text);
//返回数据并解码
$returntext= json_decode($Base->PostUrl($url, $postfields),true);
//获取返回数据中的纠错内容
$base64text=$returntext["payload"]["result"]["text"];
//解码纠错内容
$zz=json_decode(base64_decode($base64text),true);
//拼接错误信息
$src="";
foreach ($zz as $key=>$val){
// 黑名单纠错
if(!empty($val)&&array_key_exists($key,$this->type)){
$src.=$this->type[$key]."\n";
// if(=="punc"){ $src.="结果类型".$val[2];}
foreach($val as $ke=>$va){
// [位置,原字,结果字,类型]
if(!empty($va[1])&&$va[1]!=' '){
$src.=" ";
$src.="第".$va[0]."字‘";
$src.= $va[1];
$src.="’应改为‘".$va[2];
$src.= "’\n";
}
}
$src.= "\n";
}
}
return $src;
}
//去除html标签
public function removeHtml($content)
{
$handle1 = htmlspecialchars_decode($content); //把一些预定义的 HTML 实体转换为字符
$handle2 = str_replace(" ", "", $handle1);//将空格替换成空
$contents = strip_tags($handle2); //函数剥去字符串中的 HTML、XML 以及 PHP 的标签,获取纯文本内容
return $contents;
// return mb_substr($contents, 0, 50, "utf-8"); //返回字符串中的前100字符串长度的字符
}
}
// json_encode($headerBody)
/**
* Created by PhpStorm.
* User: uolon
* Date: 2022/08/08
* Time: 18:21 PM
*/
class Base
{
protected $Server = "https://api.xf-yun.com";
protected $host = "api.xf-yun.com";
protected $AppId = "xxx";
protected $ApiSecret="xxx";
protected $AccessKeyId = "xxx";
//生成 参数
public function producepostfields($text){
$text_base64=base64_encode($text);
$headerBody=[
"header"=>[
"app_id"=> $this->AppId,
"status"=>3
],
"parameter"=>[
"s9a87e3ec"=>[
"result"=>[
"encoding"=>"utf8",
"compress"=>"raw",
"format"=>"json"
]
]
],
"payload"=>[
"input"=>[
"encoding"=> "utf8",
"compress"=>"raw",
"format"=>"json",
"status"=>3,
"text"=>$text_base64
]
]
];
return json_encode($headerBody);
}
//生成 url
public function produceurl(){
$url=$this->Server."/v1/private/s9a87e3ec?authorization=".$this->produceauthorization();
$url.="&host=".$this->host;
$url.="&date=". urlencode($this->producedate());
return $url;
}
//生成 authorization
protected function produceauthorization(){
$api='api_key="'.$this->AccessKeyId.'", algorithm="hmac-sha256", headers="host date request-line", signature="';
$api.=$this->producesignature().'"';
// var_dump($api);die;
$authorization=base64_encode($api);
// var_dump($authorization_origin);die;
return $authorization;
}
//生成 date
protected function producedate(){
$producedate=gmstrftime("%a, %d %b %Y %T %Z",time());
// return "Fri, 09 Sep 2022 01:40:15 GMT";die;//$producedate;
return $producedate;
}
//生成 signature
protected function producesignature(){
$signature="host: ".$this->host."\n";
// $signature="host: api.xf-yun.com\n";
$signature.="date: ".$this->producedate()."\n";
$signature.="POST /v1/private/s9a87e3ec HTTP/1.1";
$signature_hash = hash_hmac("sha256", $signature, $this->ApiSecret,true);
$signature_base64=base64_encode($signature_hash);
return $signature_base64;
}
//curl请求
public function PostUrl($durl, $post_data){
// header传送格式
$headers = array(
'Content-Type: application/json; charset=utf-8',
// "app_id: ".$this->AppId
);
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $durl);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, true);
// 设置post请求参数
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
// 添加头信息
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// CURLINFO_HEADER_OUT选项可以拿到请求头信息
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
// 不验证SSL
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
// 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文
// curl_setopt($curl, CURLOPT_HEADER, true);
//执行命令
$data = curl_exec($curl);
// // 获得响应结果里的:头大小
// $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
// // 根据头大小去获取头信息内容
// $header = substr($data, 0, $headerSize);
$httpCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
if($httpCode!==200){
// echo "<hr><h1>打印请求头信息</h1>";
// // 打印请求头信息
// echo curl_getinfo($curl, CURLINFO_HEADER_OUT);
// echo "<hr><h1>打印请求body信息</h1>";
// // 打印请求头信息
// echo $post_data;
// // echo "<hr><h1>打印响应头信息</h1>";
// // // 获得响应结果里的:头大小
// // $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
// // // 根据头大小去获取头信息内容
// // $header = substr($data, 0, $headerSize);
// // echo $header;
// echo "<hr><h1>打印响应信息</h1>";
// echo $data;
// die;
// var_dump($httpCode);die;
}
//关闭URL请求
curl_close($curl);
//显示获得的数据
return $data;
}
}