php获取qq用户昵称和在线状态(实例分析)


Posted in PHP onOctober 27, 2013

QQ通过返回不同的图片,来表示在线或离线,图标也随之变换,既然图片不同,那么,返回的HTTP头信息中的Content-Length 也一定不同,而且,彩色图片一定会比同样子的暗色图片要大,于是,找出某个样式的彩色与暗色图片的中间值,就能达到通过判断头部返回长度的方法来获取QQ在线状态
以下是代码

<?phpfunction 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<count($field); $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;
}
PHP 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
mysql时区问题
Mar 26 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
PHP code 验证码生成类定义和简单使用示例
May 27 PHP
php获取数组长度的方法(有实例)
Oct 27 #PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 #PHP
简单的php文件上传(实例)
Oct 27 #PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 #PHP
8个必备的PHP功能实例代码
Oct 27 #PHP
PHP生成Gif图片验证码
Oct 27 #PHP
php操作xml
Oct 27 #PHP
You might like
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python正则表达式常用函数总结
2017/06/24 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
pandas.cut具体使用总结
2019/06/24 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
缓刑人员的思想汇报
2014/01/11 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
国际贸易实训报告
2014/11/05 职场文书
走群众路线学习笔记
2014/11/06 职场文书
通知书大全
2015/04/27 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Python利用capstone实现反汇编
2022/04/06 Python