转来的东西QQ接口!

来源:互联网 发布:网络舆情应对培训心得 编辑:程序博客网 时间:2024/04/29 13:07

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