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






4.15/5 (9投票s)
此库提供了一个框架,用于在应用程序中使用 Code Project 文章信息,并提供了一个提取用户信息 的实用工具
- 下载 codeprojectuser_demo - 192.83 KB
- 下载 codeprojectuser_demo_src - 184.3 KB
- 下载 codeprojectuser_library_src - 189.08 KB
引言
本文是关于 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\nString 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。