<? /*******************************************************************************/ error_reporting(E_ALL ^ E_NOTICE);
require_once( 'http.inc.php' ); require_once( 'class.Chinese.php');
//成功2xx define( 'QQ_RETURN_SUCCESS', 200 ); define( 'QQ_LOGIN_SUCCESS', 201 ); define( 'QQ_LIST_NONE', 202 ); define( 'QQ_ADDTOLIST_SUCCESS', 203 ); define( 'QQ_REPLYADD_SUCCESS', 204 ); define( 'QQ_GETMSG_NONE', 205 );
//警告3xx define( 'QQ_ADDTOLIST_NEEDAUTH',300 ); define( 'QQ_ADDTOLIST_REFUSE', 301 ); define( 'QQ_ADDTOLIST_UNKNOWN', 302 );
//失败4xx define( 'QQ_RETURN_FAILED', 400 ); define( 'QQ_LIST_ERROR', 401 ); define( 'QQ_GETMSG_ERROR', 402 );
//在线状态 define( 'QQ_STATUS_ONLINE', 10); define( 'QQ_STATUS_OFFLINE', 20); define( 'QQ_STATUS_BUSY', 30);
//血型 $QQ_DATA_BT = array ( => '', => 'A型', => 'B型', => 'O型', => 'AB型', => '其他' );
//星座 $QQ_DATA_CO = array ( => '', => '水瓶座', => '双鱼座', => '牡羊座', => '金牛座', => '双子座', => '巨蟹座', => '狮子座', => '处女座', => '天秤座', => '天蝎座', => '射手座', => '摩羯座' );
//生肖 $QQ_DATA_SH = array ( => '', => '鼠', => '牛', => '虎', => '兔', => '龙', => '蛇', => '马', => '羊', => '猴', => '鸡', => '狗', => '猪' );
//性别 $QQ_DATA_SX = array ( => '男', => '女' );
class QQClient { var $uin; var $pwd;
var $server = 'kconn.tencent.com'; //备用:219.133.51.11 var $port = 21001; //备用:8000 var $httpclient; var $chs = NULL;
function QQClient($uin,$pwd) { $this->uin = $uin; $this->pwd = $pwd; }
function encode($str) /* 说明:把KEY1=VAL1&KEY2=VAL2格式变为数组 */ { $arr = explode('&' , $str); $return = array(); foreach($arr as $k=>$v) { list($key,$val) = explode('=',$v); $return[$key] = $val; $this->chs = NULL; } return $return; }
function utf8_to_gb2312($str) { $this->chs = new Chinese("UTF8","GB2312", $str ); return $this->chs->ConvertIT(); }
function gb2312_to_utf8($str) { $this->chs = new Chinese("GB2312","UTF8", $str ); return $this->chs->ConvertIT(); }
function query($str) { $this->httpclient = new http( HTTP_V11, true ); $this->httpclient->host = 'kconn.tencent.com'; $this->httpcilent->port = 21001;
$query = $this->encode($str); $status = $this->httpclient->post( '', $query, '' ); if ( $status == HTTP_STATUS_OK ) { return $this->httpclient->get_response_body(); } else { print_r($this->httpclient); return false; } $this->httpclient->disconnect(); unset($this->httpclient); }
function split_str($str) { $arr = explode("," , $str); if($arr[count($arr)-1] == NULL) { unset($arr[count($arr)-1]); } return $arr; }
function login() { //登陆 //VER=1.1&CMD=Login&SEQ=&UIN=&PS=&M5=1&LC=9326B87B234E7235 $str = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&PS=".md5($this->pwd)."&M5=1&LC=9326B87B234E7235"; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //返回成功 if($return['RS']==0) { //登陆成功 return QQ_LOGIN_SUCCESS; } else { //登陆失败 $GLOBALS['QQ_ERROR_MSG'] = $this->utf8_to_gb2312($return['RA']); return QQ_LOGIN_FAILED; } } else { //返回失败 return QQ_RETURN_FAILED; } }
function getFriendsList() { //得到好友列表 //VER=1.1&CMD=List&SEQ=&UIN=&TN=160&UN=0 $str = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=160&UN=0"; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //返回成功 return $this->split_str($return['UN']); } else { //返回失败 return QQ_RETURN_FAILED; } }
function getOnlineList() { //得到在线好友列表 //VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN=50&UN=0 $str = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=50&UN=0"; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //返回成功 if($return['SN'] > 0) { //在线好友数>0 $uns = $this->split_str($return['UN']); //号码列表 $nks = $this->split_str($return['NK']); //昵称列表 $sts = $this->split_str($return['ST']); //状态列表 $fcs = $this->split_str($return['FC']); //头像列表 $error = 0; ((count($uns)==count($nks))==(count($sts)==count($fcs)))==(count($nks)==count($sts)) ? $num = count($uns) : $error = 1; ; if($error == 1) return QQ_LIST_ERROR; $arr = array(); for($i=0;$i<$num;$i++) { $arr[] = array( "UN" => $uns[$i] , "NK" => $this->utf8_to_gb2312($nks[$i]) , "ST" => $sts[$i] , "FC" => $fcs[$i] ); } return ($arr); } else { //在线好友数<=0 return QQ_LIST_NONE; } } else { //返回失败 return QQ_RETURN_FAILED; } }
function getInfo($uin) { //得到好友信息 //AD为联系地址,AG为年龄,EM为MAIL,FC为头像,HP为网站,JB为职业,PC为邮编,PH为联系电话,PR为简介,PV为省,RN为真实名称,SC为毕业院校,SX为性别,UN为QQ号,NK为QQ昵称 //以下注释研究 by Hackfan //BT为血型,CO为星座,CT为城市,CY为国家,MO为移动电话,SH生肖 //LV为查询的号码(1为精简查询,2为普通查询,3为详细查询) //CV未知,ID未知(身份证?),MT未知,MV未知, //VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=3&UN= $str = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&LV=3&UN=".$uin; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //返回成功 $arr = array ( 'AD' => $this->utf8_to_gb2312($return['AD']), //联系地址 'AG' => $this->utf8_to_gb2312($return['AG']), //年龄 'BT' => $return['BT'], //血型 'CO' => $return['CO'], //星座 'CT' => $this->utf8_to_gb2312($return['CT']), //城市 'CY' => $this->utf8_to_gb2312($return['CY']), //国家 'EM' => $this->utf8_to_gb2312($return['EM']), //Email 'FC' => $return['FC'], //头像 'HP' => $this->utf8_to_gb2312($return['HP']), //网站 'JB' => $this->utf8_to_gb2312($return['JB']), //职业 'MO' => $return['MO'], //移动电话 'PC' => $this->utf8_to_gb2312($return['PC']), //邮编 'PH' => $this->utf8_to_gb2312($return['PH']), //联系电话 'PR' => $this->utf8_to_gb2312($return['PR']), //简介 'PV' => $this->utf8_to_gb2312($return['PV']), //省 'RN' => $this->utf8_to_gb2312($return['RN']), //真实姓名 'SC' => $this->utf8_to_gb2312($return['SC']), //毕业院校 'SH' => $return['SH'], //生肖 'SX' => $return['SX'], //性别 'UN' => $return['UN'], //QQ号 'NK' => $this->utf8_to_gb2312($return['NK']) //昵称 ); return $arr; } else { //返回失败 return QQ_RETURN_FAILED; }
}
function addFriend($uin) { //添加新好友 //VER=1.1&CMD=AddToList&SEQ=&UIN=&UN= $str = "VER=1.1&CMD=AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //返回成功 switch($return['CD']) { case 0 : //对方允许任何人加为好友 return QQ_ADDTOLIST_SUCCESS; break; case 1 : //需要验证 return QQ_ADDTOLIST_NEEDAUTH; break; case 3 : //不允许任何人加为好友 return QQ_ADDTOLIST_REFUSE; break; default : //未知的代码 return QQ_ADDTOLIST_UNKNOWN; break; } } else { //返回失败 return QQ_RETURN_FAILED; } }
function replyAdd($uin,$type,$msg) { //回应添加好友 //VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&UN=&CD=&RS= //CD为响应状态,CD为0表示“通过验证”。CD为1表示“拒决加为对方为好友”。CD为2表示“为请求对方加为好友”。RS为你要请求的理由 $str = "VER=1.2&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&CD=".$type."&RS=".$this->gb2312_to_utf8($msg); $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 return QQ_RETURN_SUCCESS; } else { //失败 return QQ_RETURN_FAILED; } }
function delFriend($uin) { //删除好友 //VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN= $str = "VER=1.1&CMD=DelFromList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=$uin"; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 return QQ_RETURN_SUCCESS; } else { //失败 return QQ_RETURN_FAILED; } }
function changeStatus($status) { //改变状态 //VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST= //ST为要改变的状态,10为上线,20为离线,30为忙碌。 $str = "VER=1.1&CMD=Change_stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&ST=".$status; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 return QQ_RETURN_SUCCESS; } else { //失败 return QQ_RETURN_FAILED; } }
function logout() { //退出登陆 //VER=1.1&CMD=Logout&SEQ=&UIN= $str = "VER=1.1&CMD=Logout&SEQ=".rand(1000,9000)."&UIN=".$this->uin; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 return QQ_RETURN_SUCCESS; } else { //失败 return QQ_RETURN_FAILED; } }
function getMsg() { //获得消息 //VER=1.1&CMD=GetMsgEx&SEQ=&UIN= //MT表示消息类型,99表示系统消息,9表示用户消息。UN表示消息发送来源用户,MG表示发送的消息,MG消息可以表示某些特定的系统含意 //当MT=99时:MG=10表示用户上线,MG=20表示用户离线,MG=30表示用户忙碌 $str = "VER=1.1&CMD=GetMsgEx&SEQ=".rand(1000,9000)."&UIN=".$this->uin; $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 if($return['MN'] > 0) { //消息数>0 $mts = $this->split_str($return['MT']); //消息类型 $uns = $this->split_str($return['UN']); //发送者号码 $mgs = $this->split_str($return['MG']); //消息内容 $error = 0; (count($mts)==count($uns))==(count($uns)==count($mgs))? $num = count($uns) : $error = 1; ; if($error == 1) return QQ_GETMSG_ERROR; //出差错了 $arr = array(); for($i=0;$i<$num;$i++) { $arr[] = array( "MT" => $mts[$i] , "UN" => $uns[$i] , "MG" => $this->utf8_to_gb2312($mgs[$i]) ); } return ($arr); } else { //在线好友数<=0 return QQ_GETMSG_NONE; } } else { //失败 return QQ_RETURN_FAILED; } }
function sendMsg($uin,$msg) { //发送消息 //VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&MG= $str = "VER=1.1&CMD=CLTMSG&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&MG=".$this->gb2312_to_utf8($msg); $return = $this->encode($this->query($str)); if($return['RES']==0 and $return['UIN'] == $this->uin) { //服务器成功得到信息 return QQ_RETURN_SUCCESS; } else { //失败 return QQ_RETURN_FAILED; } }
} ?>
QQ轻游戏不支持获取好友关系链。支持获取头像、昵称、性别三种用户信息 1.昵称 BK.MQQ.Account.getNick(openID,callback) 获取昵称 参数: 参数 类型 名称 备注 openID string 待查询用户的openid callback function 回调函数 返回值:无 例子: function callback(openID,nick){ BK.S
为了了解在朋友关系中使用Neo4J的优势,我在MySQL数据库上创建了一个Persons表(“Persons”,20900个数据集): 和一张关系表(“友谊”,每个人有50到100个朋友): 因此,大约有120万人的关系。 现在我想查看id=1的人的朋友的朋友的朋友的朋友,因此我创建了一个如下查询: 用户ID 1的查询用了大约30秒 在Neo4J中,我为每个人创建了一个节点(20900个节点)和一
本文向大家介绍Javascript 实现微信分享(QQ、朋友圈、分享给朋友),包括了Javascript 实现微信分享(QQ、朋友圈、分享给朋友)的使用技巧和注意事项,需要的朋友参考一下 最近做微信开发,对微信公众号的开发,现在好的都是分享到朋友圈,QQ,分享给好友等分享功能,这里记录下,有需要的朋友也可以看下。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
问题内容: 在这里遇到一些建筑上的麻烦。 在C ++中,我们有“朋友”的概念,这种朋友类可以访问私有成员。 因此,我正在设计一个Java应用程序并尝试遵守MVC架构。我有一个控制器类来管理“ map_objects”之间的图形连接。我想通过使用此控制器类在DTO’map_objects’中隐藏实际设置这些连通性的函数。 (即,即使控制器类实现了设置连接性所需的功能,“用户”仍然可以直接在DTO中访
问题内容: 我有一个类似于myspace / facebook的社交网络。在我的代码中,您不是一个人的朋友,还是不是一个朋友,因此,我显示了您与之成为朋友的人的所有操作(在此帖子中,我将这些操作单独称为公告帖子,以使其更易于可视化。 因此,您每当有人发布公告时,都会向在那里的任何朋友显示。 在mysql中,您可以通过执行以下操作来获得个人朋友列表, 我想知道像facebook之类的网站如何显示您的
我希望我们的分布式事件日志记录具有适当的相关性。对于我们的Web应用程序来说,这似乎是自动的。应用程序服务API中的相关日志示例: 然而,对于我们的其他(非ASP,非WebApp)服务,如果我们使用的是Log4Net,而App Insights附加的日志是不相关的。我尝试了以下说明:https://docs.microsoft.com/en-us/azure/azure-monitor/app/c