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

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;
    }

项目运行结果如图:

这里写图片描述


这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值