QQ群成员信息获取方法

Get-QQ-Group-Infomations

QQ群成员信息获取方法

版本号:2016年7月6日

二、思路:

Q群的人员……

没发言的用户……

嗯……群管理!(小灯泡一只弹出从头上)

Google 之!得 http://qun.qq.com/member.html

于是数据有了,还缺个分析工具,如果只是排个序的话……用 Excel 吧!

因为 Excel 可以导入 tab 分割的 .txt 文件,

所以数据只需要输出成 .txt 就行,也是相当简单的。

三、功能、使用方式及代码:

功能:

对于每个成员可以获取的信息有:

  • Q号昵称Q龄性别

  • 群名片入群时间最后发言时间

  • 身份等级积分

  • 标记标签

当然你得先是群成员。

并且获取到的数据可以在 Excel 中使用

获得的数据能干啥?唔……这个我管不着。。。

使用方法:

  1. 复制下面的 源代码

  2. 打开 http://qun.qq.com/member.html
    成员管理

  3. 在地址栏打个 “J”。
    打J

  4. 然后粘贴。
    粘贴

  1. 输入群号
    输入群号

  2. 效果
    效果

  3. 复制这些数据,粘贴到记事本
    粘贴到记事本

  4. 再从记事本复制出来,粘贴到 Excel

    就不上图了。。。

完成!

源代码:

avascript:/* 打开 http://qun.qq.com/member.html 在地址栏打个 "J", 然后粘贴本js代码 */;
/**/qqGroupNumber = window.prompt("输入需要的群号(默认机器学习爱好者群)","464104106");
/**/document.body.innerHTML = "LOADING<style>*{text-align:center; font-size:4em}</style>";
/**/var bkn = ( 
/**//**/function (skey) { 
/**//**//**/var hash = 5381; 
/**//**//**/for (var i = 0, len = skey.length; i < len; ++i) 
/**//**//**//**/hash += (hash << 5) + skey.charAt(i).charCodeAt(); 
/**//**//**/return hash & 2147483647; 
/**//**/})((document.cookie.split("; ") ).map( 
/**//**//**/function(x){ 
/**//**//**//**/return x.split("="); 
/**//**//**/} 
/**//**/).filter( 
/**//**//**/function(x){ 
/**//**//**//**/return "skey" == x[0]; 
/**//**//**/})[0][1]); 
/**/var srcQunManage = "http://qun.qq.com/cgi-bin/qun_mgr/search_group_members?st=0&end=2000&gc=" + qqGroupNumber + "&bkn=" + bkn; 
/**/var srcQunZone = "http://qun.qzone.qq.com/cgi-bin/get_group_member?groupid=" + qqGroupNumber + "&g_tk=" + bkn; 
/**/var get = (function(url) { 
/**//**/var xhr = new XMLHttpRequest(); 
/**//**/xhr.open("get", url, false); 
/**//**/xhr.send(); 
/**//**/return xhr.responseText; 
/**/}); 
/**/var mem1 = JSON.stringify( 
/**//**/(JSON.parse( 
/**//**//**/get(srcQunManage) 
/**//**//**/.replace(/([^{,:])"([^:,}])/gmi, "$1\\\"$2") 
/**//**/) 
/**//**/)["mems"]); 
/**/document.body.innerHTML = ( 
/**//**/"LOADING<style>*{text-align:center; font-size:4em}</style>" + 
/**//**/"<script>\n" + 
/**//**//**/"mem1 = " + mem1 + ";\n" + 
/**//**//**/"ele = document.body;\n" + 
/**//**//**/"_Callback = function(json){\n" + 
/**//**//**//**/"var csvCell = function(x){\n" + 
/**//**//**//**//**/"if(typeof(x) === \"string\"){\n" + 
/**//**//**//**//**//**/ "x = x.replace(/&lt;/g, \"<\")\n" + 
/**//**//**//**//**//**//**/ " .replace(/&gt;/g, \">\")\n" + 
/**//**//**//**//**//**//**/ " .replace(/&amp;/g, \"&\")\n" + 
/**//**//**//**//**//**//**/ " .replace(/&quot;/g, '\"')\n" + 
/**//**//**//**//**//**//**/ " .replace(/&apos;/g, \"'\");\n" + 
/**//**//**//**//**//**/"return \"\\\"\".concat( x.replace(/\"/gmi, \"\\\"\\\"\") ).concat(\"\\\"\")\n" + 
/**//**//**//**//**/"}\n" + 
/**//**//**//**//**/"return \"\".concat(x)\n" + 
/**//**//**//**/"};\n" + 
/**//**//**//**/"mem2 = json[\"data\"][\"item\"];\n" + 
/**//**//**//**/"mem1 = mem1.sort(function(a, b){return a[\"uin\"] > b[\"uin\"] && 1 ||-1;});\n" + 
/**//**//**//**/"mem2 = mem2.sort(function(a, b){return a[\"uin\"] > b[\"uin\"] && 1 ||-1;});\n" + 
/**//**//**//**/"output = mem1.map(\n" + 
/**//**//**//**//**/"function(x, index){\n" + 
/**//**//**//**//**//**/"return (\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"uin\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"card\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"flag\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"g\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"join_time\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"last_speak_time\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"lv\"][\"level\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"lv\"][\"point\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"nick\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"qage\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"role\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(x[\"tags\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(mem2[index][\"iscreator\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(mem2[index][\"ismanager\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(mem2[index][\"nick\"]) + '\t' +\n" + 
/**//**//**//**//**//**//**/"csvCell(mem2[index][\"uin\"])\n" + ");\n" + 
/**//**//**//**//**/"}\n" + 
/**//**//**//**/").join(\"\\n\");\n" + 
/**//**//**//**/"ele.innerHTML = \"<pre>\" + \"Q号\t群名片_短\t标记\t性别\t入群时间\t发言时间\t等级\t积分\t昵称\tQ龄\t身份\t标签\t群主\t管理\t群名片\tQ号_重复<br />\"+ output + \"</pre>\";\n" + 
/**//**//**/"};\n" + 
/**//**/"</script>\n" + 
/**//**/"<script src='" + srcQunZone + "'></script>\n" 
/**/); //更新:2016年6月11日

答疑

  • 为什么源码里面全是 /**/

    因为会有各种原因把多个空格连成一个,破坏缩进

    而用了 /**/ 之后即使代码的空格被缩减过,也可以准确还原出缩进

  • 其他问题?来评论问!

参考文献:

  1. QQ 加密算法最新版 _tk,bkn算法

评论