2024年10月28日重新编辑:插件更新较大,原来的攻略不管用了,因此我做了更新。
2024年12月26日重新编辑:访问HTTP网址得到json页面后,json文件有时会不分段,因此做了修订。
是群主或管理员:直接在浏览器搜索“qq群成员管理”,并进入官网即可。
不是群主或管理员:我找到了一个基于NTQQ的机器人框架,通过调用API手动实现提取群成员的qq号。可以进入github按照指示操作(项目链接:https://github.com/LLOneBot/LLOneBot)。我也在本文总结了操作步骤,可以按照本文的提示操作。
具体步骤如下。
目录
第1步:安装QQ9,然后关闭QQ
首先安装QQ9,最好从官网(QQ-轻松做自己)下载,因为有的应用商店还没有QQ9。
安装好之后,先退出登录,关闭QQ。
第2步:安装llob_install.exe文件
然后,到官方github仓库(Releases · super1207/install_llob · GitHub)或者我的 gitee 仓库(myFile: 存一些word、ppt、cpp等文件)下载llob_install.exe 文件。
如下图是2种下载途径:
下载完后,Edge浏览器会显示黄色三角形感叹号。这时,点击下载项右边的省略号,选“保留”,再选“显示详细信息”,点“仍然保留”。如下图:
然后,右键点击下载的exe文件,以管理员身份运行。若校园网下载失败,可以换成移动网尝试。
安装完成后,打开QQ,点击“设置”,若左侧出现插件LiteLoaderQQNT和LLOneBot,即成功。如下图:
第3步:设置LLOneBot
这一步先不做!!!如果后面第4步没有成功,再来这里参考下我的设置。
我的设置如下:
第4步:调用API,得到json文件
所有API可以点击链接(点赞 - LLOneBot & NapCat)查看,根据所需API进行访问。这里只讲获取群成员列表的API,get_group_member_list。
官方给了很十几种方法,这里举例4种。我一般用方法1,比较简单。
方法1:直接访问HTTP网址
我想调用get_group_member_list,得到QQ群83xxxxx67所有群成员的信息。
那么,就先登录QQ,然后打开浏览器,访问链接 http://127.0.0.1:3000/get_group_member_list?group_id=83xxxxx67
注意,你登录的账号得在这个QQ群里,否则会访问失败。访问成功后,网页会返回json格式的页面。如下图:
有时,导出的json页面会不分段,所有内容乱七八糟地挤在一起。这种情况下,执行第5步建议用方法2。
方法2:命令行调用
命令行访问示例如下,应该是把下面的curl命令都输入命令行即可。虽然我没试过,但给你们看看官方给方法:
curl --location --request POST 'http://localhost:3000/get_group_member_list' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
"group_id": 0,
"no_cache": true
}'
方法3:python语言
代码如下,输入后运行即可:
import http.client
import json
conn = http.client.HTTPSConnection("localhost", 3000)
payload = json.dumps({
"group_id": 0,
"no_cache": True
})
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Content-Type': 'application/json'
}
conn.request("POST", "/get_group_member_list", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
方法4:C语言
代码如下,输入后编译运行即可:
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:3000/get_group_member_list");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "User-Agent: Apifox/1.0.0 (https://apifox.com)");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = "{\n \"group_id\": 0,\n \"no_cache\": true\n}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
第5步:将json转换为表格
这里是上一步方法1的后续。
若导出的 json 网页页面分段整齐,两种方法均可;
若没有分段而是挤在一起,推荐使用方法2。
方法1:cpp程序+分列
先把json转换为txt
首先,右键单击 json 网页页面,全选,复制到文本文件 json.txt 中。
注意,json.txt文件内容必须整齐地分行,如果像下图一样没有分行,可以先从网页粘贴到word,再从word粘贴到txt中。
然后,把下面的 cpp 代码和 json.txt 文件放在同一目录下,再编译运行。下面的 cpp 程序,用来读取 json.txt 中 card 和 user_id 的值,并保存到文本文件 result.txt 中:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(){
ofstream fout("result.txt");
ifstream fin("json.txt");
string name, qq;
int pos;
while(getline(fin, qq)){
pos = qq.find("user_id");
if(pos == -1)
continue;
fout << qq.substr(pos+10) << ' ';
getline(fin, name);
getline(fin, name);
pos = name.find("card\"");
fout << name.substr(pos+8) << endl;
}
fout.close();
fin.close();
return 0;
}
如果运行后 result.txt 文件是空,那就吧 json.txt 文件的编码格式从 UNICODE 另存为ANSI。如下图。
再把txt转换为表格,并分列
打开WPS或EXCEL,将 result.txt 所有内容复制到excel表格中。然后选中单元格,点击“数据 --> 分列”功能。如下图:
先选中“分隔符号”,用逗号分隔;再选固定宽度,分隔前2个字和后面的字。结果如下图:
方法2:分列
首先,直接把json页面的所有内容,复制到Excel的第一个单元格中。
然后,点击“数据 --> 分列”功能,先按照“{”符号进行分列,这样第一行每个单元格里是1个人的所有信息。再把第一行复制,然后粘贴时选择转置选项,把第一行转置为第一列。如下图:
接着,选中第一列,按照逗号进行分列,得到结果如下图:
最后留下你需要的列,再按照冒号分列,删除冒号左边的内容即可。
结束,感谢。