QQ相关(一)【导出所有QQ好友】

qq好友列表获取导出,利用QQ协议实现好友数据备份,包含:qq好友、QQ分组、QQ群、qq群成员【附code源码】 qq好友列表获取导出,利用QQ协议实现qq好友数据备份,包含:qq好友、QQ分组、QQ群、qq群成员。 我们是在浏览器中的操作,接下来看看数据到底怎么获取的,我们通过Fiddler的查找功能,就可以查找到web请求和内容信息,我们就会找到如下一个URL,当然Fiddler是在操作之前打开的 通过Fiddler发现返回的是JSON数据,实际的实现是跨域JSON,JSON的结构,是两个数... 阅读详情

LoginForm.cs代码:

   public partial class LoginForm : Form
    {

        /// <summary>
        /// 获取到的 Cookie
        /// </summary>
        public string Cookies { get; set; }


        /// <summary>
        /// 窗体函数
        /// </summary>
        public LoginForm()
        {
            InitializeComponent();
        }


        /// <summary>
        /// 窗体加载后
        /// </summary>
        private void LoginForm_Load(object sender, EventArgs e)
        {
            Browser.Navigate("http://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=1006102&daid=1&style=23&hide_border=1&s_url=http://id.qq.com/cgi-bin/get_base_key?r=" + Common.GetRand());
            Browser.DocumentCompleted += Browser_DocumentCompleted;
        }


        /// <summary>
        /// 页面加载完成后
        /// </summary>
        private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (Browser.Document.Cookie.IndexOf("ldw") >= 0)
            {
                Cookies = Browser.Document.Cookie;
                DialogResult = DialogResult.OK;
                Close();
            }
        }
    }

LoginForm.Designer.cs

 partial class LoginForm
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            this.Browser = new System.Windows.Forms.WebBrowser();
            this.SuspendLayout();
            // 
            // Browser
            // 
            this.Browser.Dock = System.Windows.Forms.DockStyle.Fill;
            this.Browser.Location = new System.Drawing.Point(0, 0);
            this.Browser.MinimumSize = new System.Drawing.Size(20, 20);
            this.Browser.Name = "Browser";
            this.Browser.ScriptErrorsSuppressed = true;
            this.Browser.ScrollBarsEnabled = false;
            this.Browser.Size = new System.Drawing.Size(434, 361);
            this.Browser.TabIndex = 0;
            // 
            // LoginForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            this.ClientSize = new System.Drawing.Size(434, 361);
            this.Controls.Add(this.Browser);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "LoginForm";
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "登录";
            this.Load += new System.EventHandler(this.LoginForm_Load);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.WebBrowser Browser;
    }

MainForm.cs代码:

public partial class MainForm : Form
    {

        /// <summary>
        /// 好友列表集合
        /// </summary>
        private Dictionary<string, Friend> Friends { get; set; }


        /// <summary>
        /// 窗体函数
        /// </summary>
        public MainForm()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }


        /// <summary>
        /// 登录按钮
        /// </summary>
        private void LoginButton_Click(object sender, EventArgs e)
        {
            var form = new LoginForm();
            if (form.ShowDialog() == DialogResult.OK)
            {
                var thread = new Thread(GetFriends);
                thread.IsBackground = true;
                thread.Start(form.Cookies);
            }
        }


        /// <summary>
        /// 加载好友列表
        /// </summary>
        private void GetFriends(object cookies)
        {
            LoginButton.Enabled = false;
            SaveText.Enabled = false;

            var url = "http://id.qq.com/cgi-bin/qqlevel_rank?page_type=1&ldw={0}&s={1}&n={2}&r={3}";
            var ldw = Regex.Match(cookies.ToString(), "ldw=(?<ldw>.+?)(;|$)").Groups["ldw"].Value;
            var n = 50;
            var s = 1;
            var loop = true;

            FriendList.Items.Clear();
            Friends = new Dictionary<string, Friend>();

            while (loop)
            {
                var web = new WebClient();
                web.Encoding = Encoding.UTF8;
                web.Headers.Set(HttpRequestHeader.Cookie, cookies.ToString());
                var response = web.DownloadString(string.Format(url, ldw, s, n, Common.GetRand()));

                var json = JsonMapper.ToObject(response);
                var count = int.Parse(json["c"].ToString());
                foreach (JsonData friend in json["ls"])
                {
                    if (Friends.ContainsKey(friend["u"].ToString()) == false)
                    {
                        Friends.Add(friend["u"].ToString(), new Friend()
                        {
                            Number = friend["u"].ToString(),
                            Name = HttpUtility.HtmlDecode(friend["n"].ToString()),
                            Level = int.Parse(friend["l"].ToString())
                        });

                        FriendList.Items.Add(new ListViewItem(new[]
                        {
                            friend["r"].ToString(),
                            friend["u"].ToString(),
                            HttpUtility.HtmlDecode(friend["n"].ToString()),
                            friend["l"].ToString() + " 级"
                        }));
                        FriendList.EnsureVisible(FriendList.Items.Count - 1);
                    }
                }

                if (Friends.Count < count) s += n;
                else loop = false;
            }

            LoginButton.Enabled = true;
            SaveText.Enabled = true;

            MessageBox.Show(this, "加载完成!", "提示", MessageBoxButtons.OK);
        }


        /// <summary>
        /// 导出为TXT文本
        /// </summary>
        private void SaveText_Click(object sender, EventArgs e)
        {
            var dialog = new SaveFileDialog()
            {
                Filter = "文本文档|*.txt",
                DefaultExt = ".txt",
                AddExtension = true,
                OverwritePrompt = true
            };

            if  (dialog.ShowDialog() == DialogResult.OK)
            {
                var text = new StringBuilder();
                foreach (var friend in Friends.Values)
                {
                    text.AppendLine(string.Format("{0}|{1}|{2}", friend.Number, friend.Name, friend.Level));
                }
                File.WriteAllText(dialog.FileName, text.ToString(), Encoding.UTF8);
            }
        }

    }

MainForm.Designer.cs

 partial class MainForm
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.LoginButton = new System.Windows.Forms.Button();
            this.FriendList = new System.Windows.Forms.ListView();
            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.SaveText = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // LoginButton
            // 
            this.LoginButton.Location = new System.Drawing.Point(12, 12);
            this.LoginButton.Name = "LoginButton";
            this.LoginButton.Size = new System.Drawing.Size(90, 30);
            this.LoginButton.TabIndex = 0;
            this.LoginButton.Text = "登录帐号";
            this.LoginButton.UseVisualStyleBackColor = true;
            this.LoginButton.Click += new System.EventHandler(this.LoginButton_Click);
            // 
            // FriendList
            // 
            this.FriendList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1,
            this.columnHeader2,
            this.columnHeader3,
            this.columnHeader4});
            this.FriendList.FullRowSelect = true;
            this.FriendList.GridLines = true;
            this.FriendList.Location = new System.Drawing.Point(12, 48);
            this.FriendList.Name = "FriendList";
            this.FriendList.Size = new System.Drawing.Size(460, 351);
            this.FriendList.TabIndex = 1;
            this.FriendList.UseCompatibleStateImageBehavior = false;
            this.FriendList.View = System.Windows.Forms.View.Details;
            // 
            // columnHeader1
            // 
            this.columnHeader1.Text = "序号";
            // 
            // columnHeader2
            // 
            this.columnHeader2.Text = "QQ";
            this.columnHeader2.Width = 120;
            // 
            // columnHeader3
            // 
            this.columnHeader3.Text = "名称";
            this.columnHeader3.Width = 150;
            // 
            // columnHeader4
            // 
            this.columnHeader4.Text = "等级";
            this.columnHeader4.Width = 90;
            // 
            // SaveText
            // 
            this.SaveText.Enabled = false;
            this.SaveText.Location = new System.Drawing.Point(108, 12);
            this.SaveText.Name = "SaveText";
            this.SaveText.Size = new System.Drawing.Size(120, 30);
            this.SaveText.TabIndex = 2;
            this.SaveText.Text = "导出 TXT 列表";
            this.SaveText.UseVisualStyleBackColor = true;
            this.SaveText.Click += new System.EventHandler(this.SaveText_Click);
            // 
            // MainForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            this.ClientSize = new System.Drawing.Size(484, 411);
            this.Controls.Add(this.SaveText);
            this.Controls.Add(this.FriendList);
            this.Controls.Add(this.LoginButton);
            this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "MainForm";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "QFriends";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button LoginButton;
        private System.Windows.Forms.ListView FriendList;
        private System.Windows.Forms.ColumnHeader columnHeader1;
        private System.Windows.Forms.ColumnHeader columnHeader2;
        private System.Windows.Forms.ColumnHeader columnHeader3;
        private System.Windows.Forms.ColumnHeader columnHeader4;
        private System.Windows.Forms.Button SaveText;
    }

项目运行结果如图:

这里写图片描述


这里写图片描述

QQ好友列表获取导出类:爬虫爬取QQ号 QQ好友列表获取类:爬虫爬取QQ号,这个个爬虫是拿来练手的,可以爬取网络中的QQ号,然后存储到本地 import urllib.request import ssl import re import os from collections import deque #导入队列库 def writeFileBytes(htmlBytes,topath): with open(topa... 阅读详情

相关推荐

通过HTTP抓取QQ好友过程

/**  * QQ邮箱登录流程(注意:要在一个HttpClient中完成,因为会保存cookie;否则必须传递cookie)  *   * 1. 取登录页  *    http://mail.qq.com/cgi-bin/loginpage  *      * 2. 取验证码页(注意:取验证码时,服务器发送回一个名verifysession的cookie,这个在请求登录时还要用到)  *    h

星星的技术专栏 7874

导出QQ好友列表、群员列表、群列表

导出QQ好友列表、群员列表、群列表

优快云博客主页地址:https://mengjian.blog.youkuaiyun.com/ 5238

qq好友列表获取数据并导出 - 用curl类 模拟QQ好友列表获取

qq好友列表获取数据并导出 - 用cur类l 模拟QQ好友列表获取 这里我们利用curl类去实现这个功能。 代码如下: //模拟浏览器查找好友列表 $url = "http://cgi.find.qq.com/qqfind/buddy/search_v3"; $header = array( 'POST /qqfind/buddy/search_v3 HTTP/1.1 Host: cgi....

码在天涯 1977

批量导出QQ好友清单的方法

一、使用火狐或其它高级浏览器进入QQ邮箱并进入通讯录 二,按F12打开调试窗口,并在控制台中输入如下代码: var qqs = ''; var objs=document.getElementById("mainFrame").contentWindow.document.getElementsByClassName('email tf'); for(var i=0;i< objs...

qwsf01115的专栏 2716

MFC仿QQ好友列表控件

该控件的实现参照了:http://www.cppblog.com/getborn/archive/2008/05/27/51268.html,表示感谢!!! 1.添加一个类名命为CFriendList,继承CListCtrl类。 2.给类中添加方法与消息响应,具体见我的资源中“MFC仿QQ好友列表控件”。 3.给对话框添加一个List Control控件,并给对话框类添加其对应变量:

xuezhe521的专栏 4832

实现QQ好友关系批量查询的实用软件

在数字时代,社交网络成为我们日常沟通不可或缺的一部分,其中QQ是广泛使用的即时通讯软件之一。QQ好友关系批量查询软件是针对QQ用户设计的一款辅助工具,它允许用户快速地获取和管理其QQ好友列表中的大量数据。该软件通过自动化技术,实现对好友信息的高效查询和分析,极大地提升了用户操作的效率。此类软件是基于QQ平台的特定需求而产生的。用户可能因为各种原因需要批量获取好友信息,如进行社交关系分析、市场调查、管理好友列表等。传统的手动查询方式耗时长,效率低下,且易受个人操作习惯的影响。

weixin_42590539的博客 963

QQ好友

Problem B: QQ好友 Problem B: QQ好友Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 343  Solved: 43[Submit][Status]DescriptionQQ已经成为现代人们生活中进行沟通、交流的重要手段。通过简单抽象,QQ好友的管理可以通过如下类进行表示: 1. QQ类...

苏木的博客 1402

导出你的所有QQ好友

最近的3Q大战很激烈,不管怎么说对于我们来说已经对QQ开始动摇了。好多朋友都开始转移到MSN、Gtalk等等服务。 可是qq很吝啬,没有提供好友导出功能。 一时冲动写了一个小程序来抓取所有好友列表。主要原理是利用qq邮箱来获取好友列表。 一些细节问题在源代码中都有说明,为了能够让大家多用一点时间,不会像MSN的导入功能那样短命,于是不说明了。 本实例采用的方法有很多bug,毕竟只是几个小时写出的东西,希望大家完善它吧。 http://www.feeqi.com/?p=131001

iOS TableView实现QQ好友列表(一)

一,创建项目 二,创建所需属性及实现列表 首先给ViewController创建两个属性 UITableView *tableView;//展示列表 NSArray *titleArray;//第一层列表需要展示的数据 初始化 tableView=[[UITableView alloc]initWit

1万+

qq好友列表获取导出备份code实例

qq好友列表获取导出备份code实例。

QQ好友导出 导出QQ好友工具 v10.0

导出QQ好友工具是一个批量导出qq好友的软件,导出QQ好友工具可以导出qq列表中的名字、 qq号、qq邮箱,备份qq好友号码必备,防止好友丢失,qq好友备份后方便找回,号码按行的格式导

Android 如何在第三方app 调起qq好友和qq群

一、调起qq好友的方法: try { //可以跳转到添加好友,如果qq号是好友了,直接聊天 String url = "mqqwpa://im/chat?chat_type=wpa&uin=对方QQ号";//uin是发送过去的qq号码 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); ...

Abner_Crazy的博客 3900

QQ好友导出工具 问雄QQ好友QQ号批量导出工具 v1.0

问雄QQ好友QQ号批量导出工具是一款可以一键提取QQ号里所有好友QQ号的工具,支持勾选删除勾选导出,可以对多个QQ同时一键提取,非常方便!问雄QQ好友QQ号批量导出工具(批量导出QQ好

qq降龙电脑版_如何查看QQ好友、微信好友的IP地址定位其地址

大家好,我是傻白,欢迎点击上方蓝字关注公众号。前段时间写了《浅谈网络人肉的一些骚操作》,一些读者咨询我如何定位对方IP,今天简单写下我知道的几种方法。stupid-bai,公众号:code充电站浅谈网络人肉的一些骚操作方法一:QQ2009查看QQ好友的ip所需工具:QQ2009电脑版百度上下载工具解压以后不用安装就可使用,打开解压后的腾讯2009文件夹,打开第一个文件夹Bin,里面有QQ...

weixin_39629093的博客 4195

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 508

大数据之VIP(Virtual IP,虚拟IP)负载均衡

VIP(Virtual IP,虚拟IP)负载均衡是一种在计算机网络中常用的技术,用于将网络请求流量均匀地分散到多个服务器上,以提高系统的可扩展性、可靠性和性能。

赵玉的专栏 4124

python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表

最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。实现方式:通过google一搜,实现的方式大概有下面这篇文章提到的几种方法:最后我选择了通过模拟登录QQ邮箱的方式来实现,该实现方式在海内网上的好友查找功能也可以看到。与其他大部分邮箱不同的是,如果使用纯数字的QQ号登录的话,除了密码,还需要输入验...

weixin_28715953的博客 1682

UE 顶点动画工具 (VAT)

导入模型需要勾选全精度UV。

iesoxj的博客 1643

Problem A: QQ好友

Description QQ已经成为现代人们生活中进行沟通、交流的重要手段。通过简单抽象,QQ好友的管理可以通过如下类进行表示: QQ类:包括一个int类型的属性,表示QQ号码;一个string类型属性,是QQ昵称。至少有一个构造函数QQ(int,string),用于初始化相关属性。 假设QQ号码互不相同。 Group类:用于对好友进行分组。包括一个string类型的属性,表示好友组的组名;一个组内QQ好友的列表,即QQ类的对象的列表。至少有如下方法: (1)构造函数Group(string)。 (2)v

山那边的猴子的博客 503

超大规模AI集群跨数据中心互联:Scale-Across技术实现与部署实践

分布式系统通过将计算任务分散到多个节点协同执行,实现算力的横向扩展。其核心原理在于网络通信、数据同步和资源调度机制的技术协同。在AI基础设施领域,分布式架构能有效突破单数据中心算力瓶颈,支撑万亿参数大模型训练。特别是面对长距离传输时延和带宽稳定性挑战,需要采用RDMA、确定性网络等关键技术。Scale-Across作为分布式系统的高级形态,通过跨地域多数据中心互联,构建逻辑统一的AI算力池,为超大规模AI训练和全球推理服务提供核心支撑。本文聚焦AI集群跨数据中心互联的技术路径,涵盖全栈优化、网络自治等实践方

chouxuyi9789的博客 400

安装 Claude Code 并接入阿里云百炼(Bailian)

这些工具通常提供可视化界面,只需在设置中填入阿里云百炼的 API Key 和 Base URL 即可,无需配置环境变量。注意:如果你使用的是阿里云百炼的 Coding Plan 套餐,请使用该套餐专属的 API Key 和 Base URL。你可以使用文本编辑器打开该文件,或者在终端使用命令(如 macOS/Linux 下使用 nano ~/.claude/settings.json)。你可以直接用自然语言下达指令,例如:“帮我在这个目录下写一个 Python 脚本,实现两数之和的功能”。

hopsky的博客 1844

python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表。实现方式:通过google一搜,实现的方式大概有下面这篇文章提到的几种方法:最后我选择了通过模拟登录QQ邮箱的方式来实现,该实现方式在海内网上的好友查找功能也可以看到。与其他大部分邮箱不同的是,如果使用纯数字的QQ号登录的话,除了密码,还需要输入验...

weixin_39605521的博客 1115

Coze离线部署实战:从镜像拉取到服务启动的完整避坑指南

本文提供了一份详尽的Coze平台离线部署实战指南。针对无外网的生产环境,详细讲解了从Docker镜像拉取、打包传输到内网服务器加载的完整流程,并重点剖析了使用docker-compose启动服务时常见的配置错误与权限问题,如文件挂载缺失、网络绑定错误等,提供了经过验证的避坑解决方案,旨在帮助运维和开发人员一次性成功部署。

weixin_29310605的博客 328
上一篇: UI库(一)【360安全卫士】
下一篇: Json.NET使用入门(五)【复杂Json反序列化】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值