CSkin博客

标题: 【获取QQ信息】C#实现查看QQ资料,头像,Q秀等信息 [打印本页]

作者: 乔克斯    时间: 2014-7-22 14:34
标题: 【获取QQ信息】C#实现查看QQ资料,头像,Q秀等信息
【获取QQ信息】C#实现查看QQ资料,头像,Q秀等信息

接下来就是介绍要分享的开源程序了。
  1.首先他会自动获取已经登录的QQ信息,信息来源于QQ的一个在线登陆网页的快速登录页面。
  这就提示你已经调用当前登录的QQ自动登录成功了,接下来下面的功能都可以正常使用,如果没有登录,会有登录框让你登录,登陆即可,绝无记录密码的代码,请放心使用。
  本示例自动登录成功后可查看任何QQ的信息记录,并非登录的账号才可以查看。
  
2.可以获取三种规格QQ秀的图片   1.带背景的普通QQ秀   2.袖珍QQ秀-即好友名片上的QQ秀   3.无背景的QQ秀

3.可以调用QQ的临时对话URL。。进行强制聊天。

4.获取个人资料,空间动态等信息。

5.获取空间访客记录。

6.查看最近的空间照片和QQ宠物。


整个窗体的示例代码:
[C#] 纯文本查看 复制代码
using Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace QQHack
{
    public partial class FrmMain : Form
    {
        public FrmMain() {
            InitializeComponent();
        }

        /// <summary>
        /// 图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnQx_Click(object sender, EventArgs e) {
            try {
                if (string.IsNullOrEmpty(txtQQ.Text)) {
                    MessageBox.Show("QQ号不可为空!");
                    return;
                }
                Button btn = (Button)sender;
                imgShow.Load(string.Format(btn.Tag.ToString(), txtQQ.Text));
                imgShow.SizeMode = PictureBoxSizeMode.CenterImage;
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        /// <summary>
        /// 页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnWeb_Click(object sender, EventArgs e) {
            try {
                if (string.IsNullOrEmpty(txtQQ.Text)) {
                    MessageBox.Show("QQ号不可为空!");
                    return;
                }
                Button btn = (Button)sender;
                webShow.Navigate(string.Format(btn.Tag.ToString(), txtQQ.Text));
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        /// <summary>
        /// 获取头像
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e) {
            try {
                if (string.IsNullOrEmpty(txtQQ.Text)) {
                    MessageBox.Show("QQ号不可为空!");
                    return;
                }
                Button btn = btnTx;
                imgShow.Load(string.Format(btn.Tag.ToString(), txtQQ.Text, 640));
                if (imgShow.Image.Size.Width <= 40) {
                    imgShow.Load(string.Format(btn.Tag.ToString(), txtQQ.Text, 240));
                    if (imgShow.Image.Size.Width <= 40) {
                        imgShow.Load(string.Format(btn.Tag.ToString(), txtQQ.Text, 100));
                    }
                }
                imgShow.SizeMode = PictureBoxSizeMode.Zoom;
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        /// <summary>
        /// 点击强制聊天
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgQQ_Click(object sender, EventArgs e) {
            try {
                if (!string.IsNullOrEmpty(txtQQ.Text)) {
                    Process.Start(string.Format(imgQQ.Tag.ToString(), txtQQ.Text));
                }
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        private void txtQQ_TextChanged(object sender, EventArgs e) {
            try {
                if (txtQQ.Text.Length >= 5) {
                    imgQQ.Load(string.Format(txtQQ.Tag.ToString(), txtQQ.Text));
                    btnTx.PerformClick();
                }
            } catch { }
        }

        private System.Net.WebClient webClient = null;
        /// <summary>
        /// 检测已登录QQ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmMain_Load(object sender, EventArgs e) {
            ServicePointManager.DefaultConnectionLimit = 512;
            webClient = new System.Net.WebClient();
            QClientHelper.QClientKey[] qqs = QClientHelper.GetQClientKey();
            if (qqs != null) {
                Text = "获取QQ信息 - 当前操作用户:" + qqs[0].UName + " (" + qqs[0].UId + ")";
                txtQQ.Text = qqs[0].UId;
            } else {
                webShow.Navigate(webShow.Tag.ToString());
            }
            //FrmZx frm = new FrmZx();
            //frm.Show(this);
        }

        private void webShow_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
            //登录Qzone  
            HtmlElement btnLogin = webShow.Document.GetElementById("loginbtn");
            if (btnLogin != null) {
                btnLogin.InvokeMember("click");
            }
        }

        private void webShow_Navigated(object sender, WebBrowserNavigatedEventArgs e) {
            if (webShow.Url == new Uri("http://ctc.qzs.qq.com/ac/qzone/login/succ.html")) {
                webShow.DocumentText = "初始化成功,现可使用所有功能!";
                button10.Visible = false;
            }
        }

        /// <summary>
        /// 最近访问记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button8_Click(object sender, EventArgs e) {
            try {
                if (string.IsNullOrEmpty(txtQQ.Text)) {
                    MessageBox.Show("QQ号不可为空!");
                    return;
                }
                Button btn = (Button)sender;
                webClient.Encoding = Encoding.GetEncoding("utf-8");//设置编码
                string html = webClient.DownloadString(string.Format(btn.Tag.ToString(), txtQQ.Text));
                if (!string.IsNullOrEmpty(html)) {
                    //取数据
                    html = html.Replace("_Callback(", "").Replace(");", "");
                    Rootobject rt = (Rootobject)JavaScriptConvert.DeserializeObject(html, typeof(Rootobject));
                    string st = "";
                    st += "<b style='color: red;'>空间最近访问人数:" + rt.data.count + "</b><br /><hr />";
                    foreach (QQList item in rt.data.list) {
                        st += string.Format("<span style='color: blue;'>名称:{0}<br />", item.nick);
                        st += string.Format("QQ:{0}<br /></span>", item.uin);
                        DateTime ntime = GetNoralTime(item.time);
                        string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                        string sday = Day[Convert.ToInt16(ntime.DayOfWeek)];
                        string ddstr = " ";
                        ddstr += (ntime.Day == DateTime.Now.Day && ntime.Month == DateTime.Now.Month) ? "今天" : "昨天";
                        st += string.Format("访问时间:{0}<br /></span>", ntime + " " + sday + ddstr);
                        st += string.Format("是否在线:<img alt=\"亮的QQ图标表示在线,灰色的表示不在线或者隐身状态\" title=\"亮的QQ图标表示在线,灰色的表示不在线或者隐身状态\" src='http://wpa.qq.com/pa?p=1:{0}:4'/><br />", item.uin);
                        st += string.Format("强制聊天:<a href='http://wpa.qq.com/msgrd?v=3&site=qq&menu=yes&uin={0}' target=\"_blank\">点击强制聊天</a><br />", item.uin);
                        st += string.Format("空间头像:<br/><img src='{0}' /><br />", item.face_url);
                        st += string.Format("QQ头像:<br/><img src='http://q.qlogo.cn/headimg_dl?bs=qq&dst_uin={0}&spec=100' /><br /><hr />", item.uin);
                    }
                    webShow.DocumentText = st;
                }
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        /// <summary>
        /// 转换Unix时间戳
        /// </summary>
        /// <param name="now">Unix时间戳</param>
        /// <returns>DateTime</returns>
        private DateTime GetNoralTime(int now) {
            int timeStamp = now;
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime dtResult = dtStart.Add(toNow);
            return dtResult;
        }

        /// <summary>
        /// 个人资料1
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button7_Click(object sender, EventArgs e) {
            try {
                if (string.IsNullOrEmpty(txtQQ.Text)) {
                    MessageBox.Show("QQ号不可为空!");
                    return;
                }
                Button btn = (Button)sender;
                webClient.Encoding = Encoding.GetEncoding("utf-8");//设置编码
                string html = webClient.DownloadString(string.Format(btn.Tag.ToString(), txtQQ.Text));
                //取数据
                html = html.Replace("_Callback(", "").Replace(");", "").Replace(""", "\"").Replace("\n", "");
                UserQQ qq = (UserQQ)JavaScriptConvert.DeserializeObject(html, typeof(UserQQ));
                string st = "";
                st += string.Format("QQ:{0}<br />", qq.uin);
                st += string.Format("<hr />名称:{0}<br />", qq.nickname);
                st += string.Format("<hr />真实姓名:{0}<br />", qq.realname);
                st += string.Format("<hr />开通空间:{0}<br />", qq.qzone == 0 ? "已开通QQ空间" : "未开通QQ空间");
                st += string.Format("<hr />空间积分:{0}<br />", qq.intimacyScore);
                st += string.Format("<hr />是否在线:<img alt=\"亮的QQ图标表示在线,灰色的表示不在线或者隐身状态\" title=\"亮的QQ图标表示在线,灰色的表示不在线或者隐身状态\" src='http://wpa.qq.com/pa?p=1:{0}:4'/><br />", qq.uin);
                st += string.Format("<hr />强制聊天:<a href='http://wpa.qq.com/msgrd?v=3&site=qq&menu=yes&uin={0}' target=\"_blank\">强制聊天</a><br />", qq.uin);
                st += string.Format("<hr /><img src='{0}' /><br /><hr />", qq.avatarUrl);
                webShow.DocumentText = st;
            } catch (Exception ex) {
                MessageBox.Show("QQ号格式错误或不存在!" + ex.Message);
            }
        }

        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button10_Click(object sender, EventArgs e) {
            Button btn = (Button)sender;
            webShow.Navigate(btn.Tag.ToString());
        }

        /// <summary>
        /// 双击保存图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void imgShow_DoubleClick(object sender, EventArgs e) {
            if(saveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK){
                imgShow.Image.Save(saveFile.FileName);
            }
        }
    }


}


注意:
部分功能接口已变更或失效。

项目源码-回复即可见下载:


作者: 原始    时间: 2014-7-22 14:40
沙发!!!
作者: 天马行空    时间: 2014-7-22 14:44
:):):):):):)
作者: easy    时间: 2014-7-22 14:44
111111111111111111111111
作者: qq1275706970    时间: 2014-7-22 14:46
来kan kan
作者: smalltalkhyb    时间: 2014-7-22 14:48
支持一下
作者: 乔克斯    时间: 2014-7-22 14:52
easy 发表于 2014-7-22 14:44
111111111111111111111111

水贴- -嫌疑严重啊。。。
作者: xiaohu_mail    时间: 2014-7-22 14:52
不错,下来学习学习
作者: lansiyao    时间: 2014-7-22 15:02
学习了!很有研究价值
作者: chinasoft008    时间: 2014-7-22 15:38
这个要顶!!
作者: flashcjy    时间: 2014-7-22 16:34
dsadsadasdasdasda
作者: haode    时间: 2014-7-25 08:24
骚货
作者: 乔克斯    时间: 2014-7-25 11:57
haode 发表于 2014-7-25 08:24
骚货

>A<!你才是
作者: iHomeSoft    时间: 2014-7-27 11:15
强制聊天是怎么实现的啊?
作者: 乔克斯    时间: 2014-7-27 11:42
iHomeSoft 发表于 2014-7-27 11:15
强制聊天是怎么实现的啊?

调用QQ的临时聊天URL
作者: spirit    时间: 2014-7-28 10:00
dddddddddddd
作者: cskin    时间: 2014-7-28 12:28
对你无语了!
作者: wtujoxk    时间: 2014-7-29 09:31
谢谢楼主分享!!!
作者: Eason    时间: 2014-7-30 11:27
果断顶啊,
作者: easy    时间: 2014-7-31 08:46
乔克斯 发表于 2014-7-22 14:52
水贴- -嫌疑严重啊。。。

哈哈哈,我是图方便
作者: shaohuatsou    时间: 2014-8-2 11:24
早段时间有研究这个。
作者: 乔克斯    时间: 2014-8-2 11:34
shaohuatsou 发表于 2014-8-2 11:24
早段时间有研究这个。

把案例共享出来~康忙~单独发我,我来整理也行。
作者: shaohuatsou    时间: 2014-8-2 11:36
乔克斯 发表于 2014-8-2 11:34
把案例共享出来~康忙~单独发我,我来整理也行。

我得找找,很有可能就没了,那次我在家里玩尾行,把硬盘给弄坏了。
作者: 乔克斯    时间: 2014-8-2 11:48
shaohuatsou 发表于 2014-8-2 11:36
我得找找,很有可能就没了,那次我在家里玩尾行,把硬盘给弄坏了。

叫你玩H游戏不开杀毒。
作者: TMC    时间: 2014-8-3 01:11
#在这里快速回复#学习
作者: 349175127    时间: 2014-8-4 11:35
看看看看看看看看看看看看
作者: undead    时间: 2014-8-4 11:44
非常好,学习了.
作者: 36513869    时间: 2014-8-4 11:50
看看哈...!!!
作者: Ghost_曉鬼    时间: 2014-8-5 14:24
这个是不是直接调用的腾讯各个接口实现的?
作者: 乔克斯    时间: 2014-8-5 16:27
Ghost_曉鬼 发表于 2014-8-5 14:24
这个是不是直接调用的腾讯各个接口实现的?

是的。
作者: MeeSii    时间: 2014-8-6 10:03
好多水贴啊,哈哈哈哈哈。其实我也是水贴。
作者: 乔克斯    时间: 2014-8-6 16:30
MeeSii 发表于 2014-8-6 10:03
好多水贴啊,哈哈哈哈哈。其实我也是水贴。

大水货。
作者: Aaron    时间: 2014-8-7 11:28
谢谢分享。
作者: ganc    时间: 2014-8-7 15:14
很好啊很好啊很好啊
作者: Blue_Pen    时间: 2014-8-8 23:51
现在为什么要回复才能看到资源
作者: Blue_Pen    时间: 2014-8-9 01:29
能不能获取更多的基本信息,如QQ好友信息中的那些基本信息?
作者: 乔克斯    时间: 2014-8-9 13:30
Blue_Pen 发表于 2014-8-9 01:29
能不能获取更多的基本信息,如QQ好友信息中的那些基本信息?

尽力了~看个人资料1 和个人资料2
作者: LWJ    时间: 2014-8-11 11:04
好强大啊。。。。。。。。。学习了
作者: checker110    时间: 2014-8-15 23:04
整一个试试
作者: 569794982    时间: 2014-8-16 10:46
每日一顶
作者: qinleiji    时间: 2014-8-16 16:30
{:3_41:}{:3_41:}
作者: 小女子    时间: 2014-8-23 22:51
支持一下
作者: 梦儿    时间: 2014-8-23 23:18
看起来不错
作者: banyahui    时间: 2014-9-1 22:55
給赞了!!!!!        
作者: fredrick2000    时间: 2014-9-2 14:44
FileName,字太多了
作者: fredrick2000    时间: 2014-9-2 14:44
FileName,字太多了
作者: NewBie    时间: 2014-9-3 17:43
很好很好 - 本文出自CSkin论坛,原文地址:http://bbs.cskin.net/thread-66-1-1.html
作者: cjkall    时间: 2014-9-4 10:51
研究研究。。。。。
作者: suan8    时间: 2014-9-9 23:12
C#实现查看QQ资料,头像,Q秀等信息
作者: abcdaa    时间: 2014-9-10 14:43
看看是怎样的
作者: 快乐鱼    时间: 2014-10-1 10:54
看看学习中。。。
作者: marin    时间: 2014-10-4 23:06
呦吼,好东西啊
作者: wpf    时间: 2014-10-10 10:12
adddddddddddddddd
作者: unwatched1    时间: 2014-10-12 23:21
有点意思
作者: roy0109    时间: 2014-10-21 01:04
好文,收藏了解
作者: nihaomaves    时间: 2014-10-25 10:30
收到查看下
作者: woshiaxie    时间: 2014-10-25 21:35
我来试试哈~
作者: root    时间: 2014-10-26 08:58
不错的样子~
作者: 梦如人生    时间: 2014-10-26 10:24
好东西啊
作者: yang109    时间: 2014-10-26 23:51
牛B、过来看看
作者: qq443061626    时间: 2014-10-28 09:23
······沙发
作者: jeanary    时间: 2014-10-31 14:31
必须支持个,感谢分享
作者: bbspcs    时间: 2014-10-31 18:10
支持一下
作者: pain    时间: 2014-11-2 10:38
很好!下下来参考一下,谢谢分享!
作者: qqhjld    时间: 2014-11-2 14:52
很好的帖子
作者: cvccvccv    时间: 2014-11-4 14:51
http://q.qlogo.cn/headimg_dl?bs=qq&dst_uin=419067339&spec=640
作者: dsaddsad    时间: 2014-11-5 20:23
看着不错,试下
作者: brucezhang80    时间: 2014-11-6 17:11
有价值,研究一下
作者: trytel    时间: 2014-11-7 17:22
看看伸缩式  
作者: asd123    时间: 2014-11-8 08:23
强制聊天
作者: asd123    时间: 2014-11-8 08:23
强制聊天
作者: kela20    时间: 2014-11-10 11:41
好厉害的样子
作者: 格调君    时间: 2014-11-10 16:15
从博客园来的
作者: 格调君    时间: 2014-11-10 16:27
这个貌似获取对方是否在线功能不行啊 不管我帐号有没有登录,它都是显示在线的状态
作者: 乔克斯    时间: 2014-11-10 17:03
格调君 发表于 2014-11-10 16:27
这个貌似获取对方是否在线功能不行啊 不管我帐号有没有登录,它都是显示在线的状态 ...

http://webpresence.qq.com/getonline?Type=1&345015918:
用这个接口,可以看到是否在线。
作者: 格调君    时间: 2014-11-12 10:20
乔克斯 发表于 2014-11-10 17:03
http://webpresence.qq.com/getonline?Type=1&345015918:
用这个接口,可以看到是否在线。 ...

话说楼主现在有木有那种 能发现隐身状态的接口
作者: 格调君    时间: 2014-11-12 10:20
乔克斯 发表于 2014-11-10 17:03
http://webpresence.qq.com/getonline?Type=1&345015918:
用这个接口,可以看到是否在线。 ...

话说楼主现在有木有那种 能发现隐身状态的接口
作者: 乔克斯    时间: 2014-11-12 10:23
格调君 发表于 2014-11-12 10:20
话说楼主现在有木有那种 能发现隐身状态的接口

= =没有。。隐身状态和离线状态发来的状态码都是一样的。即使是PC协议也不能。。
作者: hhjj3388    时间: 2014-11-12 14:19
这个好厉害 ·!!~
作者: casun99    时间: 2014-11-16 05:36
。。。。。。。。。。。
作者: 老段    时间: 2014-11-16 15:40
太吊了吧  这么多公呢个
作者: 呐个许先生    时间: 2014-11-17 14:37
2222222221111111111111111111111
作者: 乔克斯    时间: 2014-11-17 16:01
呐个许先生 发表于 2014-11-17 14:37
2222222221111111111111111111111

水贴会被抓去啪啪啪。
作者: vrayshow    时间: 2014-11-17 16:29
你为何这么屌 好像没啥你不研究的~
作者: aaronljh    时间: 2014-11-18 11:04
学习一下,支持个。。。。
作者: ksj344688430    时间: 2014-11-18 14:44
来看看代码
作者: zkb0310    时间: 2014-11-29 22:38
搞个获取相册的软件就好了
作者: hihhh    时间: 2014-11-30 17:58
真的不错,下来看看……
作者: 971790945    时间: 2014-11-30 19:46
不错谢谢分享!
作者: freeoa    时间: 2014-12-1 15:31
支持一下。。。
作者: LWJ    时间: 2014-12-2 21:24
学习了。。多谢!
作者: simple    时间: 2014-12-2 23:26
这个果断牛逼啊!
作者: userxy    时间: 2014-12-6 09:54
看看,。。。。。。
作者: 芯诺    时间: 2014-12-6 17:54
谢谢分享!        
作者: qiuhengtao    时间: 2014-12-6 22:29
aaaaaaaaa反复反反复复反反复复凤飞飞
作者: 三哥    时间: 2014-12-7 20:13
求代码、
作者: zxc153358    时间: 2014-12-7 23:05
这是免登陆的?
作者: 乔克斯    时间: 2014-12-7 23:44
zxc153358 发表于 2014-12-7 23:05
这是免登陆的?

如果你开启软件的时候,已经登录了QQ,就会自动调用已登录QQ自动登录。如果没登陆,或者没有已登录QQ。查询权限会低很多。
作者: zxc153358    时间: 2014-12-8 00:25
乔克斯 发表于 2014-12-7 23:44
如果你开启软件的时候,已经登录了QQ,就会自动调用已登录QQ自动登录。如果没登陆,或者没有已登录QQ。查 ...

好强大....不知道我哪年哪月才能开发出像这种的程序
作者: testbbs1991    时间: 2014-12-8 11:25
用的是http 发包吗?




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2