前言
在《译者编程入门指南》的最后一章咱们介绍了怎样调用百度翻译和有道翻译的API,然则在这本入门教程中,咱们仅仅是教会了大众怎样将官网上的PHP代码复制下来修改,并无仔细介绍原理。
此刻,咱们以调用搜狗翻译为例,为大众介绍PHP是怎样调用设备翻译API的。
正文
1、搜狗翻译的API文档
倘若想调用搜狗翻译的API,需要先前往搜狗深智引擎的官方网站:
https://deepi.sogou.com/
不得不说,倘若不仔细看还以为搜狗设备翻译的logo是DeepL,实质上是DeepI。
进入后前往“文档中心”-“文本翻译”-“接入文档”:
在这儿能看到非常详细的接入办法。
然而在“各语言接入DEMO”部分咱们并无看到PHP代码,仅有Python、Java、C#。显然它大意了,但咱们不可闪,咱们要把用PHP调用的代码给写出来。
2、搜狗文档中心供给的接入向导
1)接入位置
想要调用搜狗翻译的API,就得晓得它的位置是什么。在其文档中心有这般一段话:
这儿面有几个关键信息:
HTTP位置
POST办法
字段
什么意思呢?
这就要给大众讲讲什么是HTTP协议了。仔细内容亦可参考菜鸟教程供给的HTTP教程:
https://www.runoob.com/http/http-tutorial.html
简单来讲,咱们平时上网输入网址时习惯在网址前面加上http://,而后才是输入域名。
这个http便是HTTP协议,全叫作是:HyperText Transfer Protocol,超文本传输协议。从字面上来看,这是一个规定怎样传输数据的协议。
咱们平时会运用浏览器来拜访某个网站,当咱们打开浏览器的时候就相当于打开了一个遵从HTTP协议的客户端,接下来咱们输入网址再按回车,实质上便是给浏览器发送一个指令:去吧,比卡丘,去http://www.miaoxing.com给我抓只喵回来!
这个时候比卡丘就会读取这个网址,解析背面的真实服务器的位置,这个所说的服务器便是一台真实的电脑,这台电脑里有数据,比卡丘会把数据拿到后再传回到浏览器,最后表示在浏览器中。
以上便是咱们经过浏览器看网页的过程。
但这般说亦不详细,咱们来瞧瞧当咱们拜访一个网址时,浏览器发送出去的到底是什么指令吧: GET /hello.txt HTTP/1.1User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.miaoxing.comAccept-Language: en, mi
你瞧瞧,这实质上便是几行非常简易的代码,最顶上的第1个单词GET显示这个浏览器是用GET的办法将后面的指令发送出去的。
GET是一种浏览器向服务器索要数据的一种办法,其他的办法还有POST、PUT、DELETE等好几种,最常用的便是GET和POST。
在搜狗翻译的API中它说要“用POST办法发送数据”,这便是浏览器索要数据时要用的办法。
浏览器的索取数据命令发出去之后服务器会返回什么数据给浏览器呢?如下图:
菜鸟教程中供给的这幅图就很直观了,最顶上是状态行,倘若状态码是200,那样就显示服务器成功返回了数据,倘若是404,就显示服务器上无浏览器索要的数据,通常这种状况便是数据被删掉了、被和谐掉了。这亦是网友们玩儿404梗的源泉。
状态行后面还有信息报头和响应正文,这儿的响应正文大众一看就晓得是啥,这不便是HTML网页代码吗?是的,这个正文返回给浏览器后,浏览器一渲染就把好看的页面展示给大众了。
不外大众还得再回去瞧瞧那个信息报头,里面有个Content-Type,这玩意儿决定了浏览器用什么形式、什么编码来读取服务器返回的数据的。
咱们平时拜访网站时得到的数据常常有HTML网页、纯文本、照片等,她们对应的代码通常是这般的:
text/html :HTML格式text/plain :纯文本格式text/xml :XML格式image/gif :gif照片格式image/jpeg :jpg照片格式image/png:png照片格式
然则还有一类是这般的:
application/pdf:pdf格式application/msword :Word文档格式application/x-www-form-urlencoded
前面的pdf和msword大众一看就晓得是什么,但最后面这个x-www-form-urlencoded肯定无几个人见过。这种通常是咱们表单(form)传输出去的数据,例如我有一个表单是这般的:
姓名:________
秘码:________
那样咱们会用name和password来分别暗示姓名、秘码,而后把你输入的姓名和秘码转换成这般:
name=hanlintao&password=bugaosuni
注:上面的连接符用的是&,读作ampersand,暗示“和”的意思
这般服务器一看就晓得姓名是什么,秘码是什么。
因此,上面这一堆文字便是想告诉大众:
为何搜狗翻译期盼咱们调用它的时候要用Content-Type:application/x-www-form-urlencoded呢?
由于搜狗翻译期盼传递给它的数据用name=hanlintao&password=bugaosuni这种方式呈现给它。
你不是想让搜狗翻译帮你翻译一句中文吗?那就这般告诉它:source=北京语言大学&yuanwen=zhongwen&yiwen=yingwen
是不是一目了然?
那样搜狗翻译要是翻完了发给你,应该怎么发呢?
答案是:Accept:application/json
亦便是搜狗翻译用JSON这种形式来返回数据给你。啥是JSON呢?
其实搜狗翻译在文档中给出了示例: { "zly": "zly", "query": "good", //查找词 "translation": "好的", //设备翻译结果,查找正确时,必定会有结果 "errorCode": "0", //查找结果状态,详细道理可参考“错误码列表” "detect": "en" //语种检测结果,代码所表率的语言请查看“语种列表”}
这便是JSON格式的数据,里面啥都包括进去了。
讲了这么多便是为认识释下面这个截图:
因此咱们在写代码时要根据上图的提示来写,但详细怎样写,我后面再说明。
2)调用参数
在上面一步咱们晓得搜狗期盼咱们将数据以name=hanlintao&password=bugaosuni这种方式发送给它,然则详细要发送什么数据给它并无说,于是在第二部分的调用参数表格中它就说得很清楚了。这儿面有几个必填的参数,分别是:
q、from、to、pid、salt、sign
显然,咱们还是比较容易将q、from、to获取到的,这不便是待翻译的原文、源语言和目的语言吗?pid亦比较容易,注册了之后就能够得到,这个便是用来识别你是谁的,是注册完搜狗翻译API后分配给你个人的独一ID。
salt是什么?有些人会直接发这个salt翻译成“盐”,实质上这是秘码学里的一个术语,这儿就先不解释了,这便是个随机数字,能够自动生成。
sign是签名的意思,实质上便是前面的pid和q、salt以及用户秘码构成的集合的加密结果,加密的方式是用md5办法,md5是一种非常通用的加密算法,加密容易破解难。
有了以上这些参数,咱们就能够起始写代码了。
3)模拟浏览器发送数据的cURL工具
咱们这儿要用的PHP工具是cURL。能够理解为这个工具便是模拟浏览器的拜访。由于咱们既然是写代码来调用设备翻译API,肯定不可直接打开浏览器去拜访前面那个HTTP位置,因此呢咱们就需要用PHP的模拟浏览器来发送数据和接收数据,这个模拟浏览器便是cURL。
cURL中的“c”便是Client的意思,“URL”是网址,因此咱们是用代码来模拟拜访某个网址的浏览器客户端。
这个工具的运用基本办法如下: <?php//创建一个“浏览器”$ch = curl_init();//设置要发送的数据$q = "北京语言大学";$from = "zh-CHS";$to = "en";$pid = "";$key = "";$salt = rand(1,100);$sign = md5($pid.$q.$salt.$key);//将数据拼接成name=hanlintao&password=bugaosuni形式$data = "q=".$q."&from=".$from."&to=".$to."&pid=".$pid."&salt=".$salt."&sign=".$sign;//告诉“浏览器”要拜访哪个链接curl_setopt($ch, CURLOPT_URL, "http://fanyi.sogou.com/reventondc/api/sogouTranslate");//告诉“浏览器”发送和接收的数据格式curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-Type:application/x-www-form-urlencoded","Accept:application/json"));curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//告诉“浏览器”用POST办法来发送拼接好的数据curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_POST, 1);//告诉“浏览器”把拜访目的网址后得到的结果放在$output变量中$output = curl_exec($ch);//打印结果print_r($output);//关闭“浏览器”curl_close($ch);?>
以上代码运行完之后的结果是:
{ "zly":"zly", "query":"北京语言大学", "translation":"Beijing Language and Culture University", "errorCode":"0", "detect":"zh-CHS"}
(注:我将自己的PID和KEY都隐匿了,你能够注册搜狗翻译API后将自己的PID和KEY填入其中)
倘若咱们只想要译文的话,能够将JSON结果转换为PHP数组,再打印出来: <?php//创建一个“浏览器”$ch = curl_init();//设置要发送的数据$q = "北京语言大学";$from = "zh-CHS";$to = "en";$pid = "";$key = "";$salt = rand(1,100);$sign = md5($pid.$q.$salt.$key);//将数据拼接成name=hanlintao&password=bugaosuni形式$data = "q=".$q."&from=".$from."&to=".$to."&pid=".$pid."&salt=".$salt."&sign=".$sign;//告诉“浏览器”要拜访哪个链接curl_setopt($ch, CURLOPT_URL,"http://fanyi.sogou.com/reventondc/api/sogouTranslate");//告诉“浏览器”发送和接收的数据格式curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/x-www-form-urlencoded","Accept:application/json"));curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//告诉“浏览器”用POST办法来发送拼接好的数据curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_POST, 1);//告诉“浏览器”把拜访目的网址后得到的结果放在$output变量中$output = curl_exec($ch);//打印结果$ret = json_decode($output, true);echo $ret["translation"];//关闭“浏览器”curl_close($ch);?>
运行后的结果为: Beijing Language and Culture University
亦许你看到这儿就懵了,怎么忽然冒出来这么多代码,不解释解释?
其实这段代码的规律很简单,咱们给大众说明一下:
第1步:起步“浏览器”
我始终在用“浏览器”来打比方,咱们既然想去拜访搜狗的设备翻译API,那样就得用cURL工具起步一个浏览器窗口,这段代码便是:
$ch = curl_init();
第二步:准备要发送的数据
咱们要按照搜狗翻译API文档中提出的必须参数需要来准备要发送的数据,如下: $q = "北京语言大学";$from = "zh-CHS";$to = "en";$pid = "";$key = "";$salt = rand(1,100);$sign = md5($pid.$q.$salt.$key);
最后一行的md5()函数便是用来加密的。
但这般的数据不可直接发送给搜狗,搜狗翻译说了,要拼接起来发给它,因此用了下面这段代码: $data = "q=".$q."&from=".$from."&to=".$to."&pid=".$pid."&salt=".$salt."&sign=".$sign;
效果如下:
q=北京语言大学&from=zh-CHS&to=en&pid=***&salt=63&sign=***
搜狗翻译只接受这般的数据格式。
第三步:告诉浏览器要发送什么网址
代码如下: curl_setopt($ch, CURLOPT_URL, "http://fanyi.sogou.com/reventondc/api/sogouTranslate");
第四步:告诉浏览器咱们发送给它的数据格式是怎么样的 curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-Type:application/x-www-form-urlencoded","Accept:application/json"));curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
大众此刻看到咱们最起始的那个截图中的设置是怎么反映到代码中的吧?
第五步:把数据经过浏览器用POST办法发送出去 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_POST, 1);
上面这两段代码便是告诉浏览器请用POST办法来发送$data中拼接好的数据
第六步:把浏览器得到的结果发送一个变量中,准备打印 $output = curl_exec($ch);
其实到了这一步才是真正按回车键去发送调用设备翻译API的命令,前面的都是进行设置,因此她们的前缀才是curl_setopt(),opt便是option的意思。
第七步:将获取到的数据转换成数组再展示出来 $ret = json_decode($output, true);echo $ret["translation"];
由于搜狗翻译返回给咱们的数据是JSON格式的,PHP没法直接打印出来其中的某些元素,因此呢咱们需要用json_decode()函数将JSON格式的数据转换为数组,而后再将设备翻译的译文展示出来。
以上便是用PHP调用搜狗设备翻译API的全过程,这应该是大众能找到的最简单的PHP代码示例了~
|