通用论坛助手系列之特定网站的数据抽取

sqhua 2002-09-23 04:49:53
这里包括了下载网上数据和读取本地数据库的两个部分

using System;
using System.Xml;
using System.Data;

namespace 论坛客户端
{
/// <summary>
/// Summary description for
/// </summary>
public class 南宁时空网 : 网络论坛
{
string m_SessionID ;
string m_UserName ;
string m_PassWord ;
string 当前论坛编号 ;
string 当前贴子编号 ;
string 数据库文件名 = "南宁时空网.mdb" ;
public string SiteName = "南宁时空网";
数据保存 lda = new 数据保存() ;

public 南宁时空网()
{
//
// TODO: Add constructor logic here
//
lda.数据库文件名 = 数据库文件名 ;
}

override public string 取网站名称()
{
return SiteName ;
}

override public bool 登录( string UserName, string PassWord )
{
string url = string.Format( "http://"
+ "www.nnsky.com/bbs/chklogin.asp?UserName={0}&PassWord={1}", UserName, PassWord ) ;

m_SessionID = 数据传输.取得SessionID( url, "" ) ;
if(( m_SessionID != null ) && ( m_SessionID.Length > 5 ))
{
m_UserName = UserName ;
m_PassWord = PassWord ;
return true ;
}
return false;
}

override public void 下载论坛列表()
{
string url = string.Format( "http://" + "www.nnsky.com/bbs/index.asp" ) ;

string html = 数据传输.发送页面请求( url, "", m_SessionID ) ;

int index = 0, tmp_start, tmp_end, 论坛类别位置 = 0 ;
string 论坛类别 ;
string 论坛类别标志 = "<TD colSpan=4> " ;
string 论坛信息标志 = "<td><a href=\"list.asp?" ;
string 项目开始标志 ;
string 论坛位置 ;
string 论坛名称 ;
string 论坛版主 ;
string 论坛描述 ;
string 论坛编号 ;

while( true )
{
论坛类别位置 = html.IndexOf( 论坛类别标志, 论坛类别位置 + 1 ) ;
if( 论坛类别位置 < 0 )
break ;
tmp_start = 论坛类别位置 + 论坛类别标志.Length ;
tmp_end = html.IndexOf( "</TD>", tmp_start ) ;
论坛类别 = html.Substring( tmp_start, tmp_end - tmp_start ) ;

bool first = true ;
index = 论坛类别位置 ;
for( ;; )
{

index = html.IndexOf( 论坛信息标志, index + 1 ) ;
if( index < 0 )
break ;
if( first )
first = false ;
else
{
tmp_start = html.IndexOf( 论坛类别标志, 论坛类别位置 + 1 ) ;
if(( tmp_start > 0 ) && ( tmp_start < index ))
break ;
}
tmp_start = index + 论坛信息标志.Length ;
tmp_end = html.IndexOf( "\"" , tmp_start ) ;
论坛位置 = html.Substring( tmp_start, tmp_end - tmp_start ) ;

论坛编号 = 论坛位置.Substring( 论坛位置.IndexOf( "=" ) + 1 ) ;

tmp_start = html.IndexOf( "<font", index ) ;
项目开始标志 = "\">" ;
tmp_start = html.IndexOf( "\">", tmp_start ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "</font>", tmp_start ) ;
论坛名称 = html.Substring( tmp_start, tmp_end - tmp_start ) ;

项目开始标志 = "<br>" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "</td>", tmp_start ) ;
论坛描述 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存论坛列表( 论坛类别, 论坛编号, 论坛名称, 论坛描述 ) ;

项目开始标志 = "dispuser.asp?name=" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_start = html.IndexOf( 项目开始标志, tmp_start ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
论坛版主 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.删除版主列表( 论坛编号 ) ;
lda.保存版主列表( 论坛编号, 论坛版主 ) ;
while( true )
{
tmp_start = html.IndexOf( 项目开始标志, tmp_end + 1 ) ;
if( tmp_start < 0 )
break ;
tmp_end = html.IndexOf( 论坛信息标志, tmp_end + 1 ) ;
if( tmp_end < 0 )
break ;
if( tmp_end > tmp_start )
{
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
论坛版主 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存版主列表( 论坛编号, 论坛版主 ) ;
}
else
break ;
}
}
}
}

...全文
34 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aro 2002-12-11
  • 打赏
  • 举报
回复
学习
kuailexq2000 2002-12-11
  • 打赏
  • 举报
回复
have a happy study!
sqhua2013 2002-12-11
  • 打赏
  • 举报
回复
由于近来工作忙,没时间去做这个.而且我发现,这么一个工具的实用性并不大,也很难做成通用的,可以真正对应不同网站的软件.所以停下来了.我会在本月20日把源码发到我的个人主页上:
www21.brinkster.com/sqhua
fushuming 2002-09-23
  • 打赏
  • 举报
回复
再关注
ameng_2002 2002-09-23
  • 打赏
  • 举报
回复
研究一下
gangganghao 2002-09-23
  • 打赏
  • 举报
回复
收到。。。。
sqhua 2002-09-23
  • 打赏
  • 举报
回复
override public DataTable 查看论坛列表( bool Is下载最新数据 )
{
if( Is下载最新数据 )
下载论坛列表() ;
return lda.取论坛列表() ;
}

override public DataTable 查看贴子列表( string 论坛编号, bool Is下载最新数据 )
{
当前论坛编号= 论坛编号 ;
if( Is下载最新数据 )
下载贴子列表( 论坛编号 ) ;
return lda.取贴子列表( 论坛编号 ) ;
}

override public void 下载贴子列表( string 论坛编号 )
{
string url = string.Format( "http://" + "www.nnsky.com/bbs/list.asp?boardid={0}", 论坛编号 ) ;

string html = "" ;
html = 数据传输.发送页面请求( url, "", m_SessionID ) ;

int index = 0, tmp_start, tmp_end, tmp ;
string 贴子信息标志 = "新窗口" ;
string 项目开始标志 ;
string 贴子位置 ;
string 贴子名称 ;
string 贴子作者 ;
string 贴子编号 ;
for( ;; )
{
index = html.IndexOf( 贴子信息标志, index + 1 ) ;
if( index < 0 )
break ;
项目开始标志 = "dispbbs.asp?" ;
tmp_start = html.IndexOf( 项目开始标志, index ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'>", tmp_start ) ;
贴子位置 = html.Substring( tmp_start, tmp_end - tmp_start ) ;

贴子编号 = 贴子位置.Substring( 贴子位置.IndexOf( "RootID=" ) ) ;
tmp = 贴子编号.IndexOf( "&" ) ;
贴子编号 = 贴子编号.Substring( 贴子编号.IndexOf( "=" ) + 1 ) ;
tmp = 贴子编号.IndexOf( "&" ) ;
贴子编号 = 贴子编号.Substring( 0, tmp ) ;

项目开始标志 = "'>" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "</a>", tmp_start ) ;
贴子名称 = html.Substring( tmp_start, tmp_end - tmp_start ) ;

项目开始标志 = "dispuser.asp?name=" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_start ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
贴子作者 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存贴子列表( 论坛编号, 贴子编号, 贴子名称, 贴子作者 ) ;
}
}

override public DataTable 查看贴子回复( string 贴子编号, bool Is下载最新数据 )
{
当前贴子编号= 贴子编号 ;
string 论坛编号 = 当前论坛编号 ;
if( Is下载最新数据 )
下载贴子回复( 贴子编号 ) ;
return lda.取回复列表( 论坛编号, 贴子编号 ) ;
}

override public void 下载贴子回复( string 贴子编号 )
{
string 论坛编号 = 当前论坛编号 ;
string url = string.Format( "http://"
+ "www.nnsky.com/bbs/dispbbs.asp?boardID={0}&RootID={1}&ID={1}&skin=1", 论坛编号, 贴子编号 ) ;

string html = "" ;
html = 数据传输.发送页面请求( url, "", m_SessionID ) ;

int index = 0, tmp_start, tmp_end ;
string 回复信息标志 = "短消息" ;
string 项目开始标志 ;
string 回复标题 ;
string 回复内容 ;
string 回复作者 ;
string 回复时间 ;

bool first = true ;
int 回复楼层 = 0 ;
for( ;; )
{
index = html.IndexOf( 回复信息标志, index + 1 ) ;
if( index < 0 )
break ;

项目开始标志 = "dispuser.asp?name=" ;
tmp_start = html.IndexOf( 项目开始标志, index ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
回复作者 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;

项目开始标志 = "时间:" ;
tmp_start = html.IndexOf( 项目开始标志, index ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "<BR>", tmp_start ) ;
回复时间 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
if( first )
{
项目开始标志 = "</b><br>" ;
first =false ;
}
else
项目开始标志 = "<b></b><br>" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "<p align=\"right\">", tmp_start ) ;
回复内容 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存回复列表( 论坛编号, 贴子编号, 回复作者, 回复时间, 回复内容, 回复楼层++ ) ;
}
}

override public bool 回复某贴子( string 回复内容 )
{
string url = string.Format( "http://"
+ "www.nnsky.com/bbs/savereannounce.asp?boardID={0}&RootID={1}&ID={1}&skin=1&skins=1&Expression=face6.gif&UserName={2}&passWd={3}&followup={1}", 当前论坛编号, 当前贴子编号, m_UserName, m_PassWord ) ;

回复内容 = "body=" + 回复内容 ;
string html = 数据传输.发送页面请求( url, 回复内容, m_SessionID ) ;

if( html.IndexOf( "回复成功啦" ) > 0 )
return true ;
return false ;
}

override public bool 发表新贴子( string 贴子标题, string 贴子内容 )
{
//&boardtype=程序人生
string url = string.Format( "http://"
+ "www.nnsky.com/bbs/SaveAnnounce.asp?boardID={0}&skins=1&UserName={1}&passWd={2}&Expression=1&skin=1", 当前论坛编号, m_UserName, m_PassWord ) ;

贴子内容 = "body=" + 贴子内容 ;
贴子标题 = "subject=" + 贴子标题 ;
string 回复内容 = 贴子内容 + "&" + 贴子标题 ;
string html = 数据传输.发送页面请求( url, 回复内容, m_SessionID ) ;

if( html.IndexOf( "论坛错误信息" ) > 0 )
return false ;
return true ;
}
}
}

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧