【 以下文字转载自 DotNET 讨论区 】
发信人: kemhym (kemhym), 信区: DotNET
标 题: 一个web service 的例子
发信站: BBS 水木清华站 (Wed May 30 01:19:09 2001)
今天做了一个web service 的例子。功能是从特定的网页上自动下载
指定的消息,测试用的网页时是用新浪的科技新闻网页,web service
把新闻的条目和新闻的内容下载到本地机上并用xml保存。
因为用web service 运行的话速度太慢,总是说连接超时,所以我把
他改为winform程序了,有兴趣的同学可以试试改得完善些;
主要程序段如下:
public string strURLStartFlag="<li><a href=\"";
public string strURLEndFlag="\"";
public string strTitleStartFlag="blank>";
public string strTitleEndFlag="</a>";
public string strTextStartFlag="<tr><td class=l17>";
public string strTextEndFlag="href=http://stat.sina.com.cn/";
public string strTitleURL="http://tech.sina.com.cn/topnews.shtml";
protected void GetHotNews()
{
XmlDocument doc=new XmlDocument();
doc.Load("e:/gethotnews.xml");
DocumentNavigator nav=new DocumentNavigator(doc);
nav.MoveToDocumentElement();
nav.MoveToLastChild();
int iURLStartFlag=0;
int iURLStartPosition=0;
int iURLEndFlag=0;
int iTitleStartFlag=0;
int iTitleEndFlag=0;
int iTitleStartPosition=0;
int iTextStartFlag=0;
int iTextEndFlag=0;
int iTextStartPosition=0;
string strTextUrl;
string url="";
string title="";
string content="";
string strTitleContent=GetHtmlContent(strTitleURL);
int iTitleContent=strTitleContent.Length;
int pos=0;
while(pos<iTitleContent)
{
iURLStartFlag=strTitleContent.IndexOf(strURLStartFlag,pos);
if(iURLStartFlag==-1)
{
doc.Save("e:/gethotnews.xml");
return ;
}
iURLStartPosition=iURLStartFlag+strURLStartFlag.Length ;
iURLEndFlag=strTitleContent.IndexOf (strURLEndFlag,iURLStartPosition);
if(iURLEndFlag==-1)
{
doc.Save("e:/gethotnews.xml");
return ;
}
url=strTitleContent.Substring(iURLStartPosition,iURLEndFlag-iURLStartPosit
ion);
pos=iURLEndFlag;
//--------------------
iTitleStartFlag=strTitleContent.IndexOf(strTitleStartFlag,pos);
if(iTitleStartFlag==-1)
{
doc.Save("e:/gethotnews.xml");
return;
}
iTitleStartPosition=iTitleStartFlag+strTitleStartFlag.Length ;
iTitleEndFlag=strTitleContent.IndexOf (strTitleEndFlag,iTitleStartP
osition);
if(iTitleEndFlag==-1)
{
doc.Save("e:/gethotnews.xml");
return;
}
title=strTitleContent.Substring(iTitleStartPosition,iTitleEndFlag-iTitleSt
artPosition);
pos=iTitleEndFlag;
//-------------------------
strTextUrl=GetNewsTextURL(strTitleURL,url);
string strTextContent=GetHtmlContent(strTextUrl);
iTextStartFlag=strTextContent.IndexOf(strTextStartFlag);
if(iTextStartFlag==-1)
{
continue;
}
iTextStartPosition=iTextStartFlag+strTextStartFlag.Length ;
iTextEndFlag=strTextContent.IndexOf (strTextEndFlag,iTextStartPosition);
if(iTextEndFlag==-1)
{
continue;
}
content=strTextContent.Substring(iTextStartPosition,iTextEndFlag-iTextStar
tPosition);
//--------------------
nav.Insert(System.Xml.TreePosition.After,System.Xml.XmlNodeType.Element,"n
ews","","");
nav.Insert(System.Xml.TreePosition.FirstChild,System.Xml.XmlNodeType.Eleme
nt ,"url","","");
nav.InnerText =strTextUrl;
nav.Insert(System.Xml.TreePosition.After,System.Xml.XmlNodeType.Element ,"
title","","");
nav.InnerText=title;
nav.Insert(System.Xml.TreePosition.After,System.Xml.XmlNodeType.Element ,"
content","","");
nav.InnerXml="<![CDATA["+content+"]]>";
nav.MoveToParent();
strTextUrl="";
title="";
content="";
}
doc.Save("e:/gethotnews.xml");
}
public string GetNewsText(string TextStartFlag,string TextE
ndFlag,string TextURL)
{
string HtmlContent=GetHtmlContent(TextURL);
int iTextStartFlag=HtmlContent.IndexOf(TextStartFlag);
if(iTextStartFlag==-1)
{
return "";
}
int iTextStartPosition=iTextStartFlag+TextStartFlag.Length ;
int iTextEndFlag=HtmlContent.IndexOf (TextEndFlag,iTextStartPosition);
if(iTextEndFlag==-1)
{
return "";
}
return HtmlContent.Substring(iTextStartPosition,iTextEndFlag-iTextStartPo
sition);
}
public string GetHtmlContent(string Url)
{
System.Text.StringBuilder strSource=new System.Text.StringBuilder("");
try
{
System.Net.WebRequest wReq;
wReq=System.Net.WebRequestFactory.Create(Url);
System.Net.WebResponse wResp=wReq.GetResponse();
System.IO.StreamReader sr=new System.IO.StreamReader(wResp.GetResponseSt
ream(),Encoding.Default);
string strTemp="";
while((strTemp=sr.ReadLine())!=null)
{
strSource.Append(strTemp);
}
sr.Close();
}
catch(Exception err)
{
}
return strSource.ToString();
}
--
FROM 162.105.70.184