现在网上关于调用小黄鸡接口的内容,基本都是一样的,看着他们的帖子自己调试了几个小时,一直有各种各样的问题,最后还是自己搞定的,所以来写一下我遇到的问题和解决办法,还有我封装的小黄鸡的接口。
本来想在微信上弄一个聊天机器人,注册了一个小黄鸡的试用账户。调试了一会发现浏览器直接打开是可以正常显示的,可是php调用就是会显示乱码。上网找说是gzip的压缩问题,使用gzdecode()函数即可。看着很简单的解决办法,到我手上又出问题了,使用gzdecode()之后,会弹警告:data error,然后我又开始找gzdecode() data error。然而网上关于这个问题的帖子全是英文的,虽然我有谷歌的翻译,可是翻译后发现和我出现的问题完全不同,找了几篇都是这样。没有了头绪后我开始研究zlib库,我发现对字符串gzencode()后和php调用时产生的乱码是不同的。然后我在手册中发现cURL可以通过curl_setopt($ch, CURLOPT_ENCODING, $value)设置header的Accept-Encoding,设置之后果然还是一样的乱码。再我又尝试了几次后,接口传来数据调用次数不足,于是我放弃了尝试,决定不使用官方的接口而自己直接传值给小黄鸡的服务器。
打开并登录小黄鸡官网后,我随便输入几句话,然后按F12打开了谷歌浏览器的调试窗口,终于找到发送数据的请求(下图)。
然后找到了小黄鸡的url地址。我把信息修改了一下粘贴到浏览器上,果然收到了消息,看来是让我蒙对了。
于是我把官方的接口url替换成现在这个,发现返回header401 Unauthorized。然后在浏览器中找到登录小黄鸡时的cookie,使用curl_setopt($ch, CURLOPT_COOKIE, $value)设置cookie,即可正常显示。
本人刚学php不久,这篇文章仅供参考,大牛请无视。下面贴上代码。
1 private function testSim($text) 2 { 3 $url = ‘http://www.simsimi.com/getRealtimeReq?lc=ch&ft=1&normalProb=4&reqText=‘.rawurlencode($text).‘&status=W&talkCnt=1‘; 4 $ch = curl_init($url); 5 curl_setopt($ch, CURLOPT_COOKIE, ‘user_displayName=%E5%B0%BC%E5%8F%A4%E6%8B%89%E6%96%AF%E6%9D%8E%E7%88%B1%E6%96%B0%E8%A7%89%E7%BD%97%E5%A4%9A; user_photo=undefined; dotcom_session_key=s%3AjkNa4Zlg-gegNFKudhRY_-aLPDu6rh1q.%2BeG2TyuUsXt9pUNGoP%2F5u%2F9BfXeXosg0KxwCMKCCmC4; normalProb=4; lc=ch; lname=%E4%B8%AD%E6%96%87(%E7%AE%80%E4%BD%93); _ga=GA1.2.1028504419.1509626254; _gid=GA1.2.1289853464.1509775119; bbl_cnt=0; currentChatCnt=2‘); 6 curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 7 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 8 $res = curl_exec($ch); 9 curl_close($ch); 10 if (isset($res)) { 11 $json = json_decode($res, true); 12 return $json[‘respSentence‘]; 13 } else { 14 return ‘未获取到数据!‘; 15 } 16 }
时间: 2024-10-19 09:56:18