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 相关文章推荐
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
教你如何使用php session
Oct 28 PHP
php session劫持和防范的方法
Nov 12 PHP
php object转数组示例
Jan 15 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 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
CodeIgniter CLI模式简介
2014/06/17 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
JavaScript OOP类与继承
2009/11/15 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python数据结构之链表详解
2017/09/12 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
详解Python中的测试工具
2019/06/09 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python collections模块的使用
2020/10/16 Python
python switch 实现多分支选择功能
2020/12/21 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
携程英文网站:Trip.com
2017/02/07 全球购物
作风转变年心得体会
2014/10/22 职场文书
校友回访母校寄语
2015/02/26 职场文书
《植树问题》教学反思
2016/03/03 职场文书
500字作文之周记
2019/12/13 职场文书