一鍵批次匯出自己企鵝好友

小kBlog發表於2024-09-22

先附上原作者的程式碼

/**
     * @author ius.
     * @date 2022/8/1
     * @introduction 獲取QQ好友列表
     */
    function getCookie(aim) {
        const allText = document.cookie.replace(/\s*/g, ''); //document.cookie
        oneText = allText.split(";");
        for (var two of oneText) {
            const three = two.split("=");
            if (aim === three[0]) {
                return two;
            }
        }
    }

    const gtk = user.getToken();
    const uin = getCookie("uin").substring(5);
    const xhr = new XMLHttpRequest();
    const qzonetoken = window.shine0callback;
    var url = 'https://mobile.qzone.qq.com/friend/mfriend_list?qzonetoken=' + qzonetoken + '&g_tk=' + gtk + '&res_uin=' + uin + '&res_type=normal&format=json&count_per_page=10&page_index=0&page_type=0&mayknowuin=&qqmailstat=';
    xhr.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            const json = JSON.parse(xhr.responseText)
            const allGroup = json.data.gpnames;
            const allFriend = json.data.list;
            var consoleContext = "";
            for (var groupid of allGroup) {
                consoleContext += groupid["gpname"] + ":\n";
                for (const friendid of allFriend) {
                    if (groupid["gpid"] === friendid["groupid"]) {
                        consoleContext += "  " + friendid["remark"] + "(" + friendid["uin"] + ")" + "\n";
                    }
                }
            }
            console.log(consoleContext);
        }
    }
    xhr.open('GET', url)
    xhr.withCredentials = true;
    xhr.send()

獲取的資訊是好友名字+(賬號)

下面是我改良版本

獲取的資訊是賬號

// 獲取指定名稱的cookie值
function getCookie(aim) {
    // 去除cookie字串中的空格
    const allText = document.cookie.replace(/\s*/g, '');
    // 將cookie字串按分號分割成陣列
    const oneText = allText.split(";");
    
    // 遍歷每個cookie
    for (var two of oneText) {
        // 將cookie按等號分割成鍵值對
        const three = two.split("=");
        // 檢查當前cookie的名稱是否與目標名稱匹配
        if (aim === three[0]) {
            return two; // 返回匹配的cookie
        }
    }
}

// 獲取使用者的GTK(用於驗證的令牌)
const gtk = user.getToken();
// 從cookie中獲取使用者的uin,並去掉字首
const uin = getCookie("uin").substring(5);

// 建立一個XMLHttpRequest物件以傳送HTTP請求
const xhr = new XMLHttpRequest();
// 獲取qzonetoken
const qzonetoken = window.shine0callback;

// 構建請求的URL
var url = 'https://mobile.qzone.qq.com/friend/mfriend_list?qzonetoken=' + qzonetoken + '&g_tk=' + gtk + '&res_uin=' + uin + '&res_type=normal&format=json&count_per_page=10&page_index=0&page_type=0&mayknowuin=&qqmailstat=';

// 設定請求狀態變化的回撥函式
xhr.onreadystatechange = function () {
    // 當請求完成且響應狀態為200(成功)時
    if (this.readyState == 4 && this.status == 200) {
        // 解析JSON格式的響應文字
        const json = JSON.parse(xhr.responseText);
        // 獲取所有分組
        const allGroup = json.data.gpnames;
        // 獲取所有好友列表
        const allFriend = json.data.list;

        // 遍歷每個分組
        for (var groupid of allGroup) {
            // 遍歷每個好友
            for (const friendid of allFriend) {
                // 檢查好友的分組ID是否與當前分組的ID匹配
                if (groupid["gpid"] === friendid["groupid"]) {
                    // 如果匹配,列印該好友的uin(賬號),每個賬號單獨一行
                    console.log(friendid["uin"]);
                }
            }
        }
    }
}

// 初始化GET請求
xhr.open('GET', url);
// 允許攜帶憑證(如cookie)
xhr.withCredentials = true;
// 傳送請求
xhr.send();

使用方式

電腦EDGE或者Chrome瀏覽器

開啟QQ空間登入然後切換模擬模式

然後在把地址改為:https://h5.qzone.qq.com/mqzone/index

最後把程式碼放在控制檯上回車就搞定了

下面以edge瀏覽器為例子

一鍵批次匯出自己企鵝好友

相關文章