PHP实现QQ聊天机器人
PHP #聊天机器人2012-11-23 13:42
主要实现代码如下:
<?php include "http_no_cookie.class.php";// http://yige.org/php/ class qq { public $sid; public $http; public $qq_num; function __construct() { $this->http = new http_no_cookie; } function login($qq_num, $qq_pwd) { echo $data = $this->http->get("http://pt.3g.qq.com/"); $action = preg_match("/action=\"(.+)?\"/", $data, $matches); $action = $matches[1]; $params = array(); $params["login_url"] = "http://pt.3g.qq.com/s?aid=nLogin"; $params["sidtype"] = 1; $params["loginTitle"] = "手机腾讯网"; $params["bid"] = 0; $params["qq"] = $qq_num; $params["pwd"] = $qq_pwd; $params["loginType"] =1; echo $data = $this->http->post($action, http_build_query($params)); if(preg_match("/http:\/\/vc.gtimg.com\//",$data,$matches)){ echo "需要输入验证码"; return 0; exit; } if(preg_match("/密码错误/",$data,$matches)){ echo "密码错误"; return 1; exit; } $action = preg_match("/sid=(.+?)&/", $data, $matches); $this->sid = $matches[1]; return $this->sid; } function sendMsg($to_num, $msg, $sid = 0) { $sid = $sid ? $sid : $this->sid; if (!$sid) exit("sid值未传入进去"); $params = array(); $params["msg"] = $msg; $params["u"] = $to_num; $params["saveURL"] = 0; $params["do"] = "send"; $params["on"] = 1; $params["aid"] = "发送"; $url = "http://q16.3g.qq.com/g/s?sid=" . $sid; echo $data = $this->http->post($url, http_build_query($params)); return $data; } function getMsg($qq_num = 0, $sid = 0) { $qq_num = $qq_num ? $qq_num : $this->qq_num; if (!$qq_num) exit("qq_num值未传入进去"); $sid = $sid ? $sid : $this->sid; if (!$sid) exit("sid值未传入进去"); $url = "http://q16.3g.qq.com/g/s?sid=" . $sid . "&3G_UIN=" . $qq_num . "&saveURL=0&aid=nqqChat"; $data = $this->http->get($url); preg_match("/name=\"u\" value=\"(\d+)\"/", $data, $matches); $result["qq"] = $matches[1]; $data = explode("<form", $data); $data = $data[0]; preg_match_all("/<p>(.+)?<\/p>/", $data, $matches); unset($matches[1][0]); $result["content"] = $matches[1]; return $result; } function logout($sid){ $url="http://pt.3g.qq.com/s?sid=".$sid."&aid=nLogout"; echo $url; echo $this->http->get($url); } function getFriendsList($qq_num = 0, $sid = 0){ $result=array(); $qq_num = $qq_num ? $qq_num : $this->qq_num; if (!$qq_num) exit("qq_num值未传入进去"); $sid = $sid ? $sid : $this->sid; if (!$sid) exit("sid值未传入进去"); $url="http://q16.3g.qq.com/g/s?aid=nqqchatMain&sid=".$sid."&myqq=".$qq_num; while(true){ $i=1; $url.="&p=".$i; $data=$this->http->get($url); preg_match_all("/u=(.+?)&/",$data,$matches); foreach($matches[1] as $key=>$value){ $result[]=$value; } if(count($matches[1])<13) break; $i++; } return $result; } }
http_no_cookie.class.php
<?php class http_no_cookie { private $curl; public $user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13"; public function get($url) { $this->curl = curl_init(); curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 8); curl_setopt($this->curl, CURLOPT_URL, $url); curl_setopt($this->curl, CURLOPT_HEADER, 0); curl_setopt($this->curl, CURLOPT_USERAGENT, $this->user_agent); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($this->curl); curl_close($this->curl); return $data; } public function post($url, $params) { $this->curl = curl_init(); curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 8); curl_setopt($this->curl, CURLOPT_URL, $url); curl_setopt($this->curl, CURLOPT_HEADER, 1); curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($this->curl, CURLOPT_POST, 1); curl_setopt($this->curl, CURLOPT_USERAGENT, $this->user_agent); curl_setopt($this->curl, CURLOPT_POSTFIELDS, $params); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($this->curl); curl_close($this->curl); return $data; } } ?>
相关文章
- PHP高效率写法 2012/11/17
- php中的mysql_num_rows与count(*)效率对比 2012/11/16
- PHP的闭包(closure) 2012/11/08
- php设置curl的请求头信息 2012/11/08
- PHP与MySQL的存储过程 2012/11/06
- PHP相对路径问题最有效的办法 2012/11/05
- php中header函数参数Cache-control:private的用法 2012/11/01
- PHP的cURL快速入门 2012/10/31
- 修改PHP时区的3种方法 2012/10/31
- PHP加快文件下载 2012/10/31