ASP.NET下RSS新闻及其他网站新闻的读取

最近在用VS2005开发一个OA项目,项目中需要将新浪或其他网站的最新新闻放在OA首页显示。

具体实施过程中,遇到了一些问题。归纳一下,有三种方法:

1.直接嵌入网页代码

许多网站,如新浪、百度等,都提供了嵌入新闻的代码,使用相对简单,直接引用即可。本人在ASP.NET中嵌入时也遇到问题:如将嵌入代码放在<form></form>内会报错,放在<form></form>外却不会。其原因没有深究,因为毕竟这种代码嵌入后,其格式与项目要求有一定距离。

2.直接读XML文件,一般用于网站专门生成的XML文件。

这种方法最简单,几行语句便可搞定:

    // 读取XML数据源, XmlUrl是XML的URL地址
    DataSet ds  =   new  DataSet();
ds.ReadXml(xmlUrl
);
    // 绑定控件
rptNews.DataSource 
=  ds;
rtpNews.DataBind();

 3.读取RSS新闻

许多网站都提供了RSS新闻,为项目引用提供了不少方便,大多数用第2种方法可以实现,但有的网站如新浪新闻提供的RSS中用XML读取时会出现无效的字符问题。解决方案如下:

/// <summary>
/// 新浪新闻RSS读取
/// </summary>
/// <param name="xmlUrl">新浪新闻RSS地址:"http://rss.sina.com.cn/news/marquee/ddt.xml"</param>

private   void  ReadRss( string  xmlUrl)
{
    
try
    
{
        
// 读取网页
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(xmlUrl);
        HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
        Stream stream 
= response.GetResponseStream();
        StreamReader sr 
= new System.IO.StreamReader(stream);
        
// Xml对象
        XmlDocument xd = new XmlDocument();
        
// 转换XML不合法字符并载入XML
        xd.LoadXml(ConvertHex(sr.ReadToEnd()));
        
// 关闭
        sr.Close();
        stream.Close();
        response.Close();
        
// 移除多余的记录(只留8项记录)
        XmlNodeList xnlItem = xd.SelectNodes("//rss/channel/item");
        
for (int i = xnlItem.Count - 1; i >= 8; i--)
            xd.SelectNodes(
"//rss/channel").Item(0).RemoveChild(xnlItem.Item(i));
        
// 绑定数据源
        rptNews.DataSource = xd.SelectNodes("//rss/channel/item");
    }

    
catch
    
{
        rptNews.DataSourceID 
= "";
    }

    
finally
    
{
        rptNews.DataBind();
    }

}


/// <summary>
/// 将部分无效字符替换成空
/// </summary>
/// <param name="responseXml">Gta服务器Response后返回的Xml数据</param>
/// <returns>string</returns> 

private   string  ConvertHex( string  responseXml)
{
    UTF8Encoding encoding 
= new UTF8Encoding();
    Byte[] responseByteArr 
= encoding.GetBytes(responseXml);
    
for (int i = 0; i < responseByteArr.Length; i++)
    
{
        
if (responseByteArr[i] < 32) responseByteArr[i] = 32;
    }

    
return encoding.GetString(responseByteArr);
}

4.新闻网页读取后二次处理

还有一些网站并不提供RSS新闻,但提供了嵌入代码,如果完全按其格式嵌入页面,往往不能满足客户要求,以百度新闻为例,其代码是一个JavaScript的document.write语句,但页面较短,读取速度较快,于是便采用了读取后二次处理的办法,代码如下:

/// <summary>
/// 百度新闻读取
/// </summary>
/// <param name="url">百度新闻url:"http://news.baidu.com/n?cmd=1&class=civilnews&pn=1&tn=newsbrofcu"</param>

private   void  ReadBaidu( string  url)
{
    
try
    
{
        
// 读取百度新闻网页
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
        Stream stream 
= response.GetResponseStream();
        StreamReader sr 
= new System.IO.StreamReader(stream);
        
string strHtml = sr.ReadToEnd();
        sr.Close();
        stream.Close();
        response.Close();
        
// string start = "document.write('<div style="margin-bottom:10px"><a href="http://news.baidu.com" target=_blank><img src="http://www.baidu.com/search/img/slogo-news.gif" width="60" height="21" border="0" align="absbottom"></a>&nbsp;&nbsp;&nbsp;<a href="http://news.baidu.com/n?cmd=1&class=civilnews&pn=1" target="_blank" class="blk">&#x56fd;&#x5185;&#x65B0;&#x95FB;</a></div><div style="text-align:left;table-layout:fixed;word-wrap:break-word;width:100%" class=baidu>";
        
// string end = "<div style="margin-top:5px;font-size:12px"><a href="http://news.baidu.com/n?cmd=1&class=civilnews&pn=1" target="_blank" class="more">&#x66f4;&#x591a;&gt;&gt;</a></div></div>')";
        
// strHtml = strHtml.Substring(449, strHtml.Length - 449 - 175);
        
// 从449位开始搜索链接
        int i = 449;
        
int j = i - 4;
        
int count = 0;
        StringBuilder sb 
= new StringBuilder();
        
// 只取8条记录(count)
        while ((i = strHtml.IndexOf("<a ", j + 4)) >= 0 && (j = strHtml.IndexOf("</a>", j + 4)) >= 0 && count < 8)
        
{
            sb.AppendFormat(
"<a class='FontBTH' {0}", strHtml.Substring(i + 3, j + 4 - i - 2));
            count 
+= 1;
        }

        
// 显示链接
        divBaidu.InnerHtml = sb.ToString();
    }

    
catch
    
{
    }

}

以上在ASP.NET 2.0下实现,仅提供后台代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
新闻管理系统(asp.net) 我开发了两天,开发好的。 主要缺点是不支持图片 欢迎大家修改完善 安装步骤: 1.首先您需要配置应用程序的运行环境。配置方法分为两步: (1)安装Internet 信息服务(需要用到系统安装光盘): 打开\"我的电脑\"-〉\"控制面板\"-〉\"添加或删除程序\"-〉点击左边的\"添加删除Windows组件\",在弹出的窗口中选择\"Internet 信息服务\"(IIS)(注:对于Windows Server 2003,\"Internet 信息服务\"被包含在应用程序服务器里边,只需要勾选 \"应用程序服务器\"即可),然后插入与当前系统相同的系统安装光盘,确定后开始安装。 (2)安装.Net Framework 2.0,下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5 2.直接压缩本系统 装即可。如果希望新建一个虚拟目录或网站,请在网站上边点击右键选择新建虚拟目录(Windows服务器版本里有才有\"新建网站\"选项). 3.打开控制面板,管理工具,双击运行 Internet信息服务。依次打开网站 默认网站 找到虚拟目录,在右边右键选择main或是default.aspx,选择浏览即可。 asp.net常见错误及解决办法 1.错误描述:位于Config目录内的Web.sitemap文件格式不正确。或 操作必须有一个可更新的查询 分析:这可能是因为你使用了NTFS文件系统造成的,不恰当的NTFS授权也会导致这种错误。网站Config和App_Data两个文件夹需要有读写的权限。 解决办法:分别在Config和App_Data两个文件夹上点击右键,选择属性,选择安全选项卡,察看Everyone用户是否有修改的权限,如果没有请勾选。如果没有Everyone用户请依次点击添加、高级、立即查找,选中查找到的Everyone用户确定即可。 2.错误描述:无法显示 XML 页。使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。.... 分析:这可能是由于你没有正确安装.netframework 2.0的结果。 解决办法:打开IIS(即Internet信息管理器),在已安装的网站名称上边点击右键,选择属性,切换到Asp.net选项卡,察看ASP.Net version(即Asp.net版本)的选项是否为空,如果为空请从下拉列表选择2.0.50727版本或更高版本。 3.无法找到该页 分析:这可能是因为你使用的是Windows Server 2003操作系统。 解决办法:请打开IIS(Internet服务器),找到Web服务器扩展,设置Asp.Net为允许。 另一个可能的原因 可能是因为你在后台启用了Url重写功能,如果你设置了非aspx扩展名的文件扩展名,那么你需要手动在IIS(即Internet信息管理器)里边进行设置,具体方法如下: 首先在左边栏里需要设置的网站或虚拟目录上边点击右键并选择\"属性\",在\"虚拟目录\"选项卡中点击\"配置\",在打开的\"应用程序配置\"窗口中点击\"添加\",在可执行文件里边填写处理aspx文件的Dll文件路径,一般为c:\\windows\\microsoft.net\\framework\\v2.0.50727\\aspnet_isapi.dll,在扩展名里边填写你要模拟的文件扩展名,如.html.将\"动作\"限制为 GET,POST,并勾掉\"确认文件是否存在\"前边的勾即可。 4.如果仍然不能解决问题,请重新安装.net framework 2.0.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值