微信公众号天气与聊天机器人小功能
微信公眾號(hào)小功能
以下都是借鑒的微信公眾平臺(tái)的文檔加老師指點(diǎn)和自行的理解。
(1)微信公眾號(hào)發(fā)送地區(qū)回復(fù)現(xiàn)在和未來(lái)五天天氣情況
(2)發(fā)送語(yǔ)音和智能機(jī)器人聊天
一、調(diào)用天氣預(yù)報(bào)接口
實(shí)現(xiàn)微信公眾號(hào)發(fā)送地區(qū)回復(fù)現(xiàn)在和未來(lái)五天天氣情況要去調(diào)用天氣接口。
我使用的是聚合網(wǎng)的天氣接口。
知道了接口的地址、返回格式、請(qǐng)求的方式那么接下來(lái)就好做了。
這里還要說(shuō)一下向http發(fā)送請(qǐng)求的幾種方式:
1.file_get_contents()
2.curl
3.fopen()
4.fsocket();
知道了發(fā)送請(qǐng)求的方式那么就可以寫我們的代碼了。
下面的是接收微信端消息的代碼
private function receiveMsg(){$xml = file_get_contents("php://input");//獲取微信平臺(tái)發(fā)來(lái)的消息//file_put_contents("data.txt",$xml);//講發(fā)來(lái)的消息寫入文件$obj = simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);//將xml轉(zhuǎn)為對(duì)象類型return $obj;}這里是接收消息代碼
//這里證明不是第一次接入了。 處理業(yè)務(wù)邏輯 接收消息$obj = $this->receiveMsg();//判斷接收到的類型switch($obj->MsgType){case "text"://城市$city = str_replace('天氣:',"",$obj->Content);//key$key = "ee9206e9a2c81fd162750d3321e072ea";//接口地址 拼接接口地址$url = "http://apis.juhe.cn/simpleWeather/query?city=".$city."&key=".$key;//發(fā)送請(qǐng)求 默認(rèn)為json格式將其轉(zhuǎn)為數(shù)組類型$data = json_decode(file_get_contents($url),true);//file_put_contents('data.txt',$data);//判斷是否請(qǐng)求成功if($data["error_code"]==0){//當(dāng)前的數(shù)據(jù)$today = $data["result"]["realtime"];//未來(lái)五天的空氣狀況$future = $data["result"]["future"];//返回的信息$content = "您所查詢的城市為:".$data["result"]["city"]."\n";$content.= "當(dāng)前溫度為:".$today["temperature"]."℃"."\n當(dāng)前濕度為:".$today["humidity"]."%\n";$content.= "天氣狀況:".$today["info"]."\n"."風(fēng)向:".$today["direct"]."\n"."風(fēng)力:".$today["power"]."\n空氣質(zhì)量:".$today["aqi"]."\n";$content.= "以下是未來(lái)五天的天氣情況\n";//返回未來(lái)五天的空氣情況foreach($future as $k=>$v){$content.="--------------------------\n";$content.= "日期:".$v["date"]."\n";$content.="氣溫:".$v["temperature"]."\n";$content.="天氣情況:".$v["weather"]."\n";$content.="風(fēng)向:".$v["direct"]."\n";}}else{$content="您所輸入的城市有誤,請(qǐng)正確填寫。格式為'天氣:地區(qū)名'";}break;}//回復(fù)消息$this->responseText($obj,$content);}這里是回復(fù)消息代碼
//自動(dòng)回復(fù)消息private function responseText($obj,$content){//占位符的內(nèi)容$ToUserName = $obj->FromUserName;$FromUserName = $obj->ToUserName;$time = time();$msgType = "text";$contents = $content;//自動(dòng)回復(fù)$xml = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";//把占位符改為消息echo sprintf($xml,$ToUserName,$FromUserName,$time,$msgType,$contents);}二、調(diào)用圖靈機(jī)器人接口
首先我們是要語(yǔ)音和機(jī)器人交流需要去微信公眾平臺(tái)
找到接受語(yǔ)音識(shí)別結(jié)果選擇開(kāi)啟(開(kāi)啟后需要取消關(guān)注重新關(guān)注一下,否則要等24h)
然后去百度圖靈機(jī)器人注冊(cè)個(gè)賬號(hào)獲取到圖靈機(jī)器人的接口和key
然后直接寫我們的代碼,因?yàn)閳D靈機(jī)器人用的是post請(qǐng)求所以要用curl,我們最好封裝一個(gè),如下
public function http_get($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);//向那個(gè)url地址上面發(fā)送curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//設(shè)置發(fā)送http請(qǐng)求時(shí)需不需要證書curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//設(shè)置發(fā)送成功后要不要輸出1 不輸出,0輸出$output = curl_exec($ch);//執(zhí)行curl_close($ch); //關(guān)閉return $output;}public function http_post($url,$data){$curl = curl_init(); //初始化curl_setopt($curl, CURLOPT_URL, $url);//向那個(gè)url地址上面發(fā)送curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);//需不需要帶證書curl_setopt($curl, CURLOPT_POST, 1); //是否是post方式 1是,0不是curl_setopt($curl, CURLOPT_POSTFIELDS, $data);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//需不需要輸出$output = curl_exec($curl);//執(zhí)行curl_close($curl); //關(guān)閉return $output;}以下是圖靈機(jī)器人的用法
case "voice"://獲取用戶的消息轉(zhuǎn)為文本$text = urlencode($obj->Recognition);//轉(zhuǎn)碼//調(diào)用機(jī)器人的接口$url = "http://openapi.tuling123.com/openapi/api/v2";//請(qǐng)求的消息$msg = ["reqType"=>0,"perception"=>["inputText"=> ["text"=>$text,]],"userInfo"=>["apiKey"=>"b7da94fa32c8487a846e981f8761370c","userId"=>"1",]];$msg = urldecode(json_encode($msg));//轉(zhuǎn)為json格式,并且解碼//向接口發(fā)送請(qǐng)求$result = $this->http_post($url,$msg);//將得到的請(qǐng)求轉(zhuǎn)為數(shù)組$result = json_decode($result,true);//得到機(jī)器人的回復(fù)消息$content = $result["results"][0]["values"]["text"];$this->check($content);break;總結(jié)
以上是生活随笔為你收集整理的微信公众号天气与聊天机器人小功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: halcon 17 cuda cudnn
- 下一篇: 解决go build报错cannot f