Back
Featured image of post 写了一个词语接龙游戏,开放接口

写了一个词语接龙游戏,开放接口

关于这个词语接龙接口,很早以前就已经构思好了,一直没有时间实现,今天下午搞了出来,并写了个Demo。主要分为两个接口,一个用来返回接好的词语,另一个用来验证用户输入的是不是词语。

接口使用说明

1.词语接龙接口 词语接龙接口地址为:https://aoaoao.me/api/do.php,使用时请以get方式将词语首字传递给接口。 请求格式:https://aoaoao.me/api/do.php?w=词语首字 比如想要获取首字为“一”的成语: https://aoaoao.me/api/do.php?w=一 接口会反馈类似于下面这样的数据:

{"code":"1","result":"一板一眼","message":"找到100条词语"}

其中各项参数说明如下表:

参数名 参数说明 详情
code 状态码 返回查询状态,1代表成功查到,0代表查找不到,2代表输入的不是一个单字
result 结果 成功查到时会随机在查到的词语中返回一个结果
message 提示信息 不解释…成功时会提示找到的成语个数

2.词语检查接口

这个接口用于检查用户输入的是否是一个词语(准确来说是名词),检查范围比较宽松,但也很准确,几乎能查出所有用户胡编的词。

词语检查接口地址为:https://aoaoao.me/api/check.php,使用时请以get方式将词语首字传递给接口。

请求格式:https://aoaoao.me/api/check.php?w=要检查的词语 比如想要检查“螳臂当车”是不是一个合法词语 https://aoaoao.me/api/check.php?w=螳臂当车 接口会反馈类似于下面这样的数据:

{"code":"1","message":"验证通过"}

其中各项参数说明如下表:

message提示信息不解释…成功时会提示找到的成语个数

参数名 参数说明 详情
code 状态码 返回查询状态,1代表成功查到,0代表查找不到,2代表输入的不是一个单字
message 提示信息 不解释…

源代码及实现原理

1.词语接龙接口

实现这个接口很容易想到的方法就是建立一个庞大的数据库存放各种成语,但这样做很麻烦。我在网上找到一个可以查成语的网站,内容比较全,但不提供接口,就自己写了一个利用正则抓取成语。

PHP代码如下:

<?php
/*
PHP词语接龙接口  2015-11-18
数据来自wx6.org
树洞分享 https://aoaoao.me
*/
//头部信息
header("Content-Type: application/json; charset=utf-8");
$word="";
$word=str_replace(" ","",$_GET['w']);
//判断输入的字是否合法,如果不能正常统计请把下边的3换成2
if($word=="" || mb_strlen($word) != 3){ 
$code="2";
$message="魂淡,你确定你输入的是个字?";
$resulr="";
}else{
$word_re=str_replace("%","",urlencode($word));
//获取词语数据
$text = file_get_contents("http://chengyu.wx6.org/start_".$word_re.".aspx");
//过滤无关数据
 $intH1end = strpos($text, '<!-- Search BEGIN -->');
 $text = substr($text,0,$intH1end);
 //正则匹配
preg_match_all('/<a\shref=\"http:\/\/.*\/show.*\">(.+)?<\/a>/isU',$text,$match);
$count=count($match[1]);
if($count==0){ 
$code="0";
$message="未找到匹配词语";
}else{
$code="1";
$message="找到".$count."条词语";	
}
//随机选取一个成语
$rand_num=rand(0,$count-1);
$result=$match[1][$rand_num];
}
//防止乱码
$arr["code"] = urlencode($code);
$arr['result'] = urlencode($result);
$arr['message'] = urlencode($message);
//返回数据
echo urldecode(json_encode($arr));

随便测试了一下,性能还不错,大部分词都能接上来。 2.词语检查接口 说原理之前先看我对接口进行测试的表格:

测试词 测试结果 测试词 测试结果
 拔苗助长 **通过**  我去你的 **不通过 **
 长发及腰 **通过**  编辑文章 **不通过 **
 阿里云 **通过** 马云 **通过** 
 螳臂当车 **通过**  我去年买了个表 **通过 **

可以看出这个接口对网络流行语的适应性还是比较好的。原理有点奇葩…它会访问所请求词语的百度百科词条,看这个词条是否存在,如果存在则验证通过。

源代码如下:

<?php
/*
PHP词语接龙接口  2015-11-18
数据来自wx6.org
树洞分享 https://aoaoao.me
*/
//头部信息
header("Content-Type: application/json; charset=utf-8");
$w="";
$w=$_GET['w'];
//将文字进行URL编码
$w=urlencode($w);
//从百度百科查询词语
$text = file_get_contents("http://baike.baidu.com/search/word?word=".$w);
//判断是否找到词语
$code=strstr($text, "百度百科尚未收录词条");
if(!$code){ 
$code1="1";
$message1="验证通过";
}else{ 
$code1="0";
$message1="魂淡,你输入的是个词语吗?";
}
$arr1["code"]=urlencode($code1);
$arr1["message"]=urlencode($message1);
echo urldecode(json_encode($arr1));
?>

词语接龙演示

于是乎用上面的两个接口做了一个demo.用户输词后先验证,验证后再查词. 演示地址:https://aoaoao.me/api/demo/play.html 截图:

 
 
 
 
 

以后有时间了会改进一下,调用图灵机器人的接口 源代码及演示打包下载:http://pan.baidu.com/s/1pJs12XH

Licenced under CC BY-NC-SA 4.0
views
这篇文章发表于 1776 天前,可能包含过期内容、中二言论、失效链接