如果我們利用php擷取QQ使用者名稱與線上狀態QQ並未給我們提供api介面了,如果要擷取我們可以通過QQ空間或QQ網頁版聊天來實現。
QQ通過返回不同的圖片,來表示線上或離線,表徵圖也隨之變換
既然圖片不同,那麼,返回的HTTP頭資訊中的Content-Length 也一定不同,而且,彩色圖片一定會比同樣子的暗色圖片要大,於是,找出某個樣式的彩色與暗色圖片的中間值,就能達到通過判斷頭部返回長度的方法來擷取QQ線上狀態
以下是代碼
| 代碼如下 |
複製代碼 |
function get_qq_status($uin) { error_reporting(0); $f=file_get_contents('http://wpa.qq.com/pa?p=1:'.$uin.':4'); if(!$f) return(true); foreach($http_response_header as $val) { if(strpos($val,'Content-Length')!==false) { return(intval(substr($val,16,50))>1000); } } } ?> |
上面比較簡單,下面來個更好的
| 代碼如下 |
複製代碼 |
function tphp_qq_online( $uin ) { $reques = "GET /pa?p=1:".$uin.":1 HTTP/1.1rn"; $reques .= "Host: wpa.qq.comrn"; $reques .= "User-Agent: PHP_QQ_SPYrnrn"; if ( !( $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ) ) ) return(-1); if ( !( socket_connect( $socket, "wpa.qq.com", 80 ) ) ) return(-1); if ( !( socket_write( $socket, $reques ) ) ) return(-1); if ( !( $respon = socket_read( $socket, 1024, PHP_BINARY_READ ) ) ) return(-1);; socket_close( $socket ); $field = explode( "rn", $respon ); for ( $i=0; $i if ( strncasecmp($field[$i], "Location:", 9) == 0 ) { if ( strpos( $field[$i], "online") ) { $ret = 1; } else if ( strpos( $field[$i], "offline") ) { $ret = 0; } else { $ret = -1; } // if break; } // if } // for return( $ret ); } /* }}} */
echo tphp_qq_online( 561272831 ); ?> |
例,qq使用者暱稱和線上狀態
| 代碼如下 |
複製代碼 |
//擷取QQ狀態 function getQQState($qq){ $url ='http://wpa.qq.com/pa?p=2:'.$qq.':41&r=' . time (); $headInfo = get_headers($url,1); $length = $headInfo['Content-Length']; if ($length==1243) { return true; }else { return false; } } //擷取QQ暱稱 function getQQNick($qq){ $str = file_get_contents('http://r.qzone.qq.com/cgi-bin/user/cgi_personal_card?uin='.$qq); $pattern = '/'.preg_quote('"nickname":"','/').'(.*?)'.preg_quote('",','/').'/i'; preg_match ( $pattern,$str, $result ); return $result[1]; } //擷取QQ姓名 function getQQName($qq){ //$qqArr = include 'friendArr.php';//預先設定的 //$username = $qqArr[$qq]; if (!$username) { $username = getQQNick($qq); } return $username; } |
http://www.bkjia.com/PHPjc/633157.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/633157.htmlTechArticle如果我們利用php擷取QQ使用者名稱與線上狀態QQ並未給我們提供api介面了,如果要擷取我們可以通過QQ空間或QQ網頁版聊天來實現。 QQ通過返回不同...