65.9K
CodeProject 正在变化。 阅读更多。
Home

Code Project文章信息库(第二部分)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.15/5 (9投票s)

2008年5月1日

CPOL

5分钟阅读

viewsIcon

23718

downloadIcon

251

此库提供了一个框架,用于在应用程序中使用 Code Project 文章信息,并提供了一个提取用户信息 的实用工具

引言

本文是关于 CodeProject.dll 系列文章的第二部分,该 DLL 可用于提取 CodeProject 上关于用户和文章的信息。在本文中,我们将讨论 User 类及其实现的功能。User 类负责通过成员编号(或 ID)获取特定用户信息。可以提取以下信息;

  • 成员姓名 - 请勿与成员 ID 或编号混淆
  • 用户状态 - 例如,铜牌、银牌、金牌或白金
  • 发布的消息数 - 包括论坛和对其他文章的回复
  • 发布文章数
  • 简介 - 用户的简短描述(可能包含一些 HTML 格式)
  • Location
  • 职位
  • Company
  • 加入时间 - 用户加入 Code Project 的日期
  • 主页 - 个人网站的 URL
  • 文章评论 - 用户最近评论过的文章列表
  • 论坛评论 - 用户最近评论过的论坛列表

请勿滥用此库。本库允许从 Code Project 网站提取信息,请勿一次性检索过多用户信息,否则将构成拒绝服务攻击。如果发生这种情况过于频繁,本文将被删除!警告您。我还要提醒 Code Project 的成员,根据网站规则,禁止下载用户列表用于盈利或其他目的的分发。

背景

本文基于两页:http://www.codeproject.com/script/Membership/Profiles.aspx?mid=###memberid###http://www.codeproject.com/script/Forums/LatestComments.aspx?fmid=###memberid###&pgnumpager=###pagenumber###. 第一页是“谁是名人”页面,其中包含特定用户的多数信息。而第二页(实际上是一组页面)包含最近帖子的列表。

请注意,所有 HTML 源代码中的空格都已被修剪。

“谁是名人”页面包含以下信息;

成员名称

<h4><a name="1"/></a>1. 
###member name###</h4>

状态

<b><span id="ctl00_MC_MR_ctl00_S" class="###styleclass###">###status###</span></b>.

发布的消息

<td style="white-space:nowrap"  class="SmallText"><a id="ctl00_MC_MR_ctl00_MP" 
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
href="https://codeproject.org.cn/script/Forums/LatestComments.aspx?fmid=###memberid###"> 
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
Messages Posted</a></td>
<td class="SmallText" align="left">###number### - ###category###</td>

发帖状态

  • 未发布任何消息
  • 发帖者:该成员已发布多达 100 条消息
  • 活跃者:该成员已发布 100 至 1000 条消息
  • 有影响力者:该成员已发布 1000 至 5000 条消息
  • 骨干:该成员已发布 5000 条以上消息

发布文章

<td style="white-space:nowrap"  class="SmallText"><a id="ctl00_MC_MR_ctl00_AS"  
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
href="https://codeproject.org.cn/script/Articles/MemberArticles.aspx?amid=###memberid###"> 
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
Articles Submitted</a></td>
<td class="SmallText" align="left">###number### - ###category###</td>

作者状态

  • 浏览者:未发布任何文章
  • 贡献者:该成员已提交多达 4 篇文章
  • 作者:该成员已提交 5-14 篇文章
  • 多产者:该成员已提交 15-24 篇文章
  • 传奇:该成员已提交 25 篇以上文章

简介

<td  class="SmallText" align="left" colspan="2" width="100%">###biography###</td>

请注意,简介可能包含一些 HTML 格式;CodeProject.dll 会将 <br /> 换行符替换为 \r\n 标记。

Location

<td class="SmallText">Location</td>
<td  class="SmallText" align="left" colspan="2"><img  
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
src="###location of country graphic###" alt="###country name###" width="16"  
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
height="11" /> ###country name###</td>

注意 ###country name### 文本前面的空格。

职位

    
<td class="SmallText">Job Title</td>
<td class="SmallText" align="left" colspan="2">###job title###</td>

Company

<td class="SmallText">Company</td>
<td class="SmallText" align="left" colspan="2">###company###</td>

加入时间

<td class="SmallText">Member since</td>
<td  class="SmallText" align="left">
###day of week###, ###month### ###day of month###, ###year###<br />
(###number of months### months) 
</td>

例如:

<td class="SmallText">Member since</td>
<td  class="SmallText" align="left">
Friday, January 18, 2008<br />
(3 months) 
</td>

主页

<td class="SmallText">Homepage</td>
<td  class="SmallText" align="left"><a id="ctl00_MC_MR_ctl00_H"  
###LINE BREAK INSERTED TO REDUCE ARTICLE WIDTH###
href="http://www.derek-bartram.co.uk">http://www.derek-bartram.co.uk</a></td>

使用代码

用户部分库围绕 User 类构建,该类具有以下事件、方法和属性;

  • User(String userID) - 构造函数接受一个成员 ID(或编号),用于标识 Code Project 中的用户。还调用 update()
  • void update() - 更新对象至最新信息;所有事件触发都是调用 update 的直接结果
  • List<String> ArticleComments {get;} - 返回用户评论过的文章列表(顺序不固定,无重复)
  • List<String> ForumComments {get;} - 返回用户发过帖子的论坛列表(顺序不固定,无重复)
  • String MemberName {get;} - 返回用户的友好名称(例如,Derek Bartram)
  • User.Status UserStatus {get;} - 返回用户的用户状态(例如,对我而言是 Gold,因为我已发布 15-24 篇文章)
  • int NumberMessagesPosted {get;} - 返回在文章和论坛中发布的总消息数
  • int NumberArticlesPosted {get;} - 返回公开可用的文章数(不包括已删除或未发布的文章)
  • String Biography {get;} - 以字符串形式返回简介,将 <br /> 更改为 \r\n
  • String Location {get;} - 返回用户的所在地
  • String JobTitle {get;} - 返回用户的职位
  • String Company {get;} - 返回用户工作的公司
  • DateTime MemberSince {get;} - 返回用户加入 Code Project 的日期
  • String Homepage {get;} - 返回用户的个人主页
  • event MemberNameChangedEventDelegate MemberNameChanged - 在成员姓名更改时触发*
  • event UserStatusChangedEventDelegate UserStatusChanged - 在用户状态更改时触发*
  • event NumberMessagesPostedChangedEventDelegate NumberMessagesPostedChanged - 在已发布消息数更改时触发*
  • event NumberArticlesPostedChangedEventDelegate NumberArticlesPostedChanged - 在已发布文章数更改时触发*
  • event BiographyChangedEventDelegate BiographyChanged - 在简介更改时触发*
  • event LocationChangedEventDelegate LocationChanged - 在所在地更改时触发*
  • event JobTitleChangedEventDelegate JobTitleChanged - 在职位更改时触发*
  • event CompanyChangedEventDelegate CompanyChanged - 在公司更改时触发*
  • event MemberSinceChangedEventDelegate MemberSinceChanged - 在成员加入日期更改时触发(在首次调用 update() 后不应再调用)*
  • event HomepageChangedEventDelegate HomepageChanged - 在主页更改时触发*

仅在调用 update()(也在构造函数中发生)期间检测到更改时触发*

获取用户信息

以下代码示例演示了如何使用 User 类来获取信息,如演示(及上方截图)所示。

User u = new User("4843375");

Console.WriteLine("Name : " + u.MemberName);
Console.WriteLine("Status : " + u.UserStatus.ToString());
Console.WriteLine("Messages Posted : " + u.NumberMessagesPosted);
Console.WriteLine("Articles Posted : " + u.NumberArticlesPosted);
Console.WriteLine("Location : " + u.Location);
Console.WriteLine("Job Title : " + u.JobTitle);
Console.WriteLine("Company : " + u.Company);
Console.WriteLine("Member Since : " + u.MemberSince.ToString());
Console.WriteLine("Homepage : " + u.Homepage);

Console.WriteLine("");
Console.WriteLine("Biography : " + u.Biography);
Console.WriteLine("");

foreach (String articleName in u.ArticleComments)
{
    Console.WriteLine("Commented in article \"" + articleName + "\"");
}

Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");

foreach (String forum in u.ForumComments)
{
    Console.WriteLine("Commented in forum \"" + forum + "\"");
}

历史

版本 1.0.0.1 - CodeProject.dll 的第二个版本,引入了 User

有用链接

codeprojectarticle.aspx(第一部分,文章)

codeprojectuser.aspx(第二部分,用户)

codeprojectkevinbacon.aspx(第三部分,凯文·贝肯)

其他许可说明

请随意在您的工作中对此使用,但请注意,这里使用的是修改版的 The Code Project Open License (CPOL),基本上与标准许可证相同,只是此代码未经事先授权不得用于商业或非营利性商业用途。请参阅随附源代码和演示文件中的 license.txt 或 license.pdf。

© . All rights reserved.