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 相关文章推荐
学习使用PHP数组
Oct 09 PHP
php中的时间显示
Jan 18 PHP
php横向重复区域显示二法
Sep 25 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
php根据年月获取季度的方法
Mar 31 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
WampServer搭建php环境时遇到的问题汇总
Jul 23 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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 模拟POST|GET操作实现代码
2010/07/20 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
php unlink()函数使用教程
2018/07/12 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
Python实现控制台中的进度条功能代码
2017/12/22 Python
Python新手如何理解循环加载模块
2020/05/29 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
简单的命令查看安装的python版本号
2020/08/28 Python
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
社区食品安全实施方案
2014/03/28 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书