转来的东西QQ接口!

今天闲着没事,写了这个简单的工具。由于是闲着没事,所以代码质量非常差。也没有加入任何容错的代码,也没有考虑到各种数据,也没有处理需要密码才能访问的qq空间。

但是这个可以给大家提供一个非常好的思路:

view plaincopy to clipboardprint?
using System;  
using System.Collections.Generic;  
using System.Net;  
using System.Text.RegularExpressions;  
namespace QQ  
{  
    class QZone  
    {  
        private List<long> BlogList = null;  
        public long QNumber;  
        public Dictionary<long, QBlogData> BlogDataDictionary = null; 
        #region 正则匹配表达式  
        private Regex RgxItem = new Regex("<p class=/"list_tit/">.*?</p>", RegexOptions.Singleline | RegexOptions.Compiled);  
        private Regex RgxID = new Regex("(?<=Blog//().*?(?=//))", RegexOptions.Singleline | RegexOptions.Compiled);  
        private Regex RgxTitle = new Regex("(?<=<span >).*?(?=</span>)", RegexOptions.Singleline | RegexOptions.Compiled);  
        private Regex RgxCategory = new Regex("(?<=Category//(')个人日记(?='//))", RegexOptions.Singleline | RegexOptions.Compiled);  
        private Regex RgxContext = new Regex("(?<=<div id=/"blogDetailDiv/".*?>).*?(?=</div>)", RegexOptions.Singleline | RegexOptions.Compiled);  
        private Regex RgxTime = new Regex("(?<=(发表|转载)于).*?(?=<)", RegexOptions.Singleline | RegexOptions.Compiled); 
        #endregion  
        public QZone(long QNumber)  
        {  
            this.QNumber = QNumber;  
        }  
        public List<long> GetBlogList()  
        {  
            if(BlogList == null)  
            {  
                WebClient wc = new WebClient();  
                string RecData = wc.DownloadString(string.Format(@"http://b.qzone.qq.com/cgi-bin/blognew/blog_output_toppage?uin={0}&property=GoRE&numperpage=1000&maxlen=1000&direct=1", QNumber));  
                MatchCollection mc = RgxItem.Matches(RecData);  
                BlogList = new List<long>();  
                foreach(Match match in mc)  
                {  
                    string item = match.Value;  
                    string id = RgxID.Match(item).Value;  
                    BlogList.Add(long.Parse(id));  
                }  
            }  
            return BlogList;  
        }  
        public Dictionary<long, QBlogData> GetBlogDataDictionary()  
        {  
            if(BlogList == null)  
            {  
                GetBlogList();  
            }  
            if(BlogDataDictionary == null)  
            {  
                WebClient wc = new WebClient();  
                BlogDataDictionary = new Dictionary<long, QBlogData>();  
                foreach(long BlogID in BlogList)  
                {  
                    string RecData = wc.DownloadString(string.Format(@"http://b.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin={0}&blogid={1}&numperpage=1000&property=GoRE", QNumber, BlogID));  
                    QBlogData data = new QBlogData();  
                    data.BlogID = BlogID;  
                    data.Title = RgxTitle.Match(RecData).Value;  
                    data.Context = RgxContext.Match(RecData).Value;  
                    data.Category = RgxCategory.Match(RecData).Value;  
                    data.Time = DateTime.Parse(RgxTime.Match(RecData).Value);  
                    BlogDataDictionary.Add(BlogID, data);  
                }  
            }  
            return BlogDataDictionary;  
        }  
        public QBlogData GetBlogData(long BlogID)  
        {  
            if(BlogDataDictionary == null)  
            {  
                GetBlogDataDictionary();  
            }  
            return BlogDataDictionary[BlogID];  
        }  
    }  
    struct QBlogData  
    {  
        public long BlogID;  
        public string Title;  
        public string Context;  
        public string Category;  
        public DateTime Time;  
    }  

using System;
using System.Collections.Generic;
using System.Net;
using System.Text.RegularExpressions;
namespace QQ
{
    class QZone
    {
        private List<long> BlogList = null;
        public long QNumber;
        public Dictionary<long, QBlogData> BlogDataDictionary = null;
        #region 正则匹配表达式
        private Regex RgxItem = new Regex("<p class=/"list_tit/">.*?</p>", RegexOptions.Singleline | RegexOptions.Compiled);
        private Regex RgxID = new Regex("(?<=Blog//().*?(?=//))", RegexOptions.Singleline | RegexOptions.Compiled);
        private Regex RgxTitle = new Regex("(?<=<span >).*?(?=</span>)", RegexOptions.Singleline | RegexOptions.Compiled);
        private Regex RgxCategory = new Regex("(?<=Category//(')个人日记(?='//))", RegexOptions.Singleline | RegexOptions.Compiled);
        private Regex RgxContext = new Regex("(?<=<div id=/"blogDetailDiv/".*?>).*?(?=</div>)", RegexOptions.Singleline | RegexOptions.Compiled);
        private Regex RgxTime = new Regex("(?<=(发表|转载)于).*?(?=<)", RegexOptions.Singleline | RegexOptions.Compiled);
        #endregion
        public QZone(long QNumber)
        {
            this.QNumber = QNumber;
        }
        public List<long> GetBlogList()
        {
            if(BlogList == null)
            {
                WebClient wc = new WebClient();
                string RecData = wc.DownloadString(string.Format(@"http://b.qzone.qq.com/cgi-bin/blognew/blog_output_toppage?uin={0}&property=GoRE&numperpage=1000&maxlen=1000&direct=1", QNumber));
                MatchCollection mc = RgxItem.Matches(RecData);
                BlogList = new List<long>();
                foreach(Match match in mc)
                {
                    string item = match.Value;
                    string id = RgxID.Match(item).Value;
                    BlogList.Add(long.Parse(id));
                }
            }
            return BlogList;
        }
        public Dictionary<long, QBlogData> GetBlogDataDictionary()
        {
            if(BlogList == null)
            {
                GetBlogList();
            }
            if(BlogDataDictionary == null)
            {
                WebClient wc = new WebClient();
                BlogDataDictionary = new Dictionary<long, QBlogData>();
                foreach(long BlogID in BlogList)
                {
                    string RecData = wc.DownloadString(string.Format(@"http://b.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin={0}&blogid={1}&numperpage=1000&property=GoRE", QNumber, BlogID));
                    QBlogData data = new QBlogData();
                    data.BlogID = BlogID;
                    data.Title = RgxTitle.Match(RecData).Value;
                    data.Context = RgxContext.Match(RecData).Value;
                    data.Category = RgxCategory.Match(RecData).Value;
                    data.Time = DateTime.Parse(RgxTime.Match(RecData).Value);
                    BlogDataDictionary.Add(BlogID, data);
                }
            }
            return BlogDataDictionary;
        }
        public QBlogData GetBlogData(long BlogID)
        {
            if(BlogDataDictionary == null)
            {
                GetBlogDataDictionary();
            }
            return BlogDataDictionary[BlogID];
        }
    }
    struct QBlogData
    {
        public long BlogID;
        public string Title;
        public string Context;
        public string Category;
        public DateTime Time;
    }
}


使用的时候直接调用就OK:

view plaincopy to clipboardprint?
static void Main(string[] args)  
{  
    QZone qz = new QZone(qq号);  
    qz.GetBlogList();  
    qz.GetBlogDataDictionary();  

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aimeast/archive/2009/05/23/4211676.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值