`

用js直接读取Rss新闻的两种方法

    博客分类:
  • Ajax
阅读更多

在这里我主要是用了两种方法:

第一种是直接用js来访问,这种方法的优点是简单,但缺点是不能在firefox上使用

第二种是用prototype进行实现,当然对ie和firefox就都能满足了

但不论你是用哪种方法,都会面临一个问题:

由于客户端浏览器的安全设置问题,从客户端JavaScript脚本中用XMLHttpRequest直接访问第三方的网址是被禁止的。

最简单的方法就是在自己的服务器上添加一个代理,客户端脚本先把请求发送给代理,代理转发请求,把响应发回给客户端脚本。

所以,我们先在自己的服务器上添加一个代理

/**
 * 
 */
package com.sech.web.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

/**
 * 
 * <p>
 * Copyright: Copyright (c) 2009
 * </p>
 * 
 * @author sech
 * 
 * @version 1.0
 */
public class RssRead extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4431127246599359389L;
	private static int READ_BUFFER_SIZE = 1024;

	/**
	 * 
	 */
	public RssRead() {
		// TODO Auto-generated constructor stub
	}

	public void init() throws ServletException {
	}

	// Process the HTTP Get request
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String urlString = request.getParameter("url");		
		writeResponse(response, urlString);
	}

	private void writeResponse(HttpServletResponse response, String urlString)
			throws ServletException {
		try {
			URL url = new URL(urlString);
			URLConnection urlConnection = url.openConnection();
			response.setContentType(urlConnection.getContentType());
			InputStream ins = urlConnection.getInputStream();
			OutputStream outs = response.getOutputStream();
			byte[] buffer = new byte[READ_BUFFER_SIZE];
			int bytesRead = 0;
			while ((bytesRead = ins.read(buffer, 0, READ_BUFFER_SIZE)) != -1) {
				outs.write(buffer, 0, bytesRead);
			}
			outs.flush();
			outs.close();
			ins.close();
		} catch (Exception e) {
			try {
				response.sendError(
						HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e
								.getMessage());
			} catch (IOException ioe) {
				throw new ServletException(ioe);
			}
		}
	}

	// Process the HTTP Post request
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	// Clean up resources
	public void destroy() {
	}
}
然后再在web.xml中配置下:
<servlet>
    <servlet-name>rssread</servlet-name>
    <servlet-class>com.sech.web.servlet.RssRead</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>rssread</servlet-name>
    <url-pattern>/rssread</url-pattern>
  </servlet-mapping>
这样我们就可以直接访问:http://localhost/rssread 了
既然已经建立了服务器代理,那下面我们就进行js的编写.
第一种:
function get_news(servername)
{
	var URL,i;
	var s_wz,e_wz,str,htmlText;
	htmlText = "";
	URL = servername+"rssread?url=http://news.sohu.com/rss/shehui.xml";	
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async=false;
	xmlDoc.load(URL);
	nodes = xmlDoc.documentElement.childNodes;
	var ItemN = xmlDoc.getElementsByTagName("item");
	for(i=0;i<7;i++)
	{
		TextTitle = ItemN[i].selectSingleNode("title").text;//获取title内容
		TextLink = ItemN[i].selectSingleNode("link").text;//获取link内容
		//Textdescription = ItemN[0].selectSingleNode("description").text;
		//s_wz = Textdescription.indexOf("src='");
		//e_wz = Textdescription.indexOf("'",s_wz+5);
		//Imgurl = Textdescription.slice(s_wz+5,e_wz);
		htmlText = htmlText + "<LI><a href='"+TextLink+"' target=_blank>"+TextTitle+"</a></LI>"
	}
	return htmlText;

}
 html的调用:
<DIV class=textDiv id="news">
<UL>
<script  language="JavaScript">    
  document.writeln(sendRequest('http://localhost/'))
  </script>   
</UL>
</DIV>
 第二种方法:
var SendRequestAjax = Class.create();

SendRequestAjax.prototype ={ 
 
	initialize: function(servername) { 
		   this.servername = servername;
  },
  
	sendRequest:function(){	
    var url =this.servername+"rssread?url=http://news.sohu.com/rss/shehui.xml";
    var pars = ""; 
    var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: this.sendRequestCompleted.bind(this)});
},   

sendRequestCompleted:function(res){ 	 
    var results= res.responseXML; 
    var title = null; 
    var item = null; 
    var link = null; 
    var htmlText="";   
    var items = results.getElementsByTagName("item");     
    for(var i = 0; i <  7; i++) { 
        item = items[i]; 
        link=items[i].getElementsByTagName("link")[0].firstChild.nodeValue; 
        title = items[i].getElementsByTagName("title")[0].firstChild.nodeValue; 
        
        htmlText = htmlText + "<LI><a href='"+link+"' target=_blank>"+title+"</a></LI>"
    }    
    $("news").innerHTML="<UL>"+htmlText+"</UL>";    
}
}; 
function sendRequest(servername) { 
    var oSendRequestAjax = new SendRequestAjax(servername);
    oSendRequestAjax.sendRequest();        
}  
 html代码:
<script type="text/javascript" src="js/prototype.js"></script>
<DIV class=textDiv id="news">
<script  language="JavaScript">    
  (sendRequest('http://localhost/'))
  </script>   
</DIV>
 OK.这样两种方法就都搞定了.
分享到:
评论

相关推荐

    php ajax异步读取rss文档数据

    在本文中,我们将深入探讨如何使用PHP和AJAX异步读取RSS文档数据。RSS(Really Simple Syndication)是一种广泛使用的XML格式,用于简洁、快速地发布和同步网站内容。通过这种方式,用户无需直接访问网站就能获取...

    Atom-discord_feedbot,一种不协调的机器人,它读取rss/atom提要并将它们重复到一个频道中.zip

    这两种格式都是用于订阅和分发网络内容的标准化方式。RSS是一种较早且广泛使用的格式,而Atom则是RSS的一个替代品,提供了更现代和规范化的结构。RSS和Atom提要通常用于博客、新闻站点和播客,让读者可以订阅并获取...

    asp+sql讯时新闻管理系统源码_3.5

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中粘贴...

    Java+XML写的RSS阅读器

    Java和XML是IT行业中两种非常重要的技术,它们在构建RSS阅读器中发挥着核心作用。RSS(Really Simple Syndication)是一种用于发布和订阅新闻、博客文章等在线内容的格式,而Java作为一门广泛使用的编程语言,可以...

    用ajax实现读博客rss示例代码

    标题“用ajax实现读博客rss示例代码”中涉及到的知识点包括ajax技术、RSS(Really Simple Syndication,即简易信息聚合)以及RSS的读取方式。描述中提到这是一份介绍如何使用ajax技术实现读取博客RSS的具体示例代码...

    免费RSS聚合程序_dotnet整站程序.rar

    RSS(Really Simple Syndication)是一种内容发布格式,允许用户订阅并获取网站更新,无需直接访问每个网站。此程序可能是一个完整的网站解决方案,用于搭建一个能够自动抓取、解析和展示RSS源的平台。 描述中的...

    讯时新闻文章管理系统 v3.0(源码)

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从...

    Asp.Net+Ajax实现的宝宝RSS阅读器源码下载

    通过分析和学习这个Asp.Net+Ajax的RSS阅读器源码,开发者不仅能了解这两种技术的基本应用,还能深入掌握Web应用的架构设计、数据交互以及用户体验提升的方法。这对于想要在Web开发领域深化技能的初学者来说,无疑是...

    zerodhaFeeds2:读取此RSS feed的android应用程序

    标题 "zerodhaFeeds2" 提供了一个关于Android应用程序的信息,它专注于读取特定的RSS(Really Simple Syndication)feed。RSS是一种用于发布和聚合新闻、博客和其他在线内容的标准格式。这个应用由React Native构建...

    RSSnotifier:节点RSS阅读器电报机器人。 提供有关查询匹配元素的通知,并支持多个用户

    每个订阅都可以设置为两种模式: 查询模式-每个查询匹配元素都会触发通知; 阅读模式-每个新元素都会收到通知。 用法 假设您已安装Node(和npm),请部署实例: 克隆此仓库, git clone ...

    讯时网站管理系统 5.0.rar

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中...

    讯时网站管理系统 v5.0.zip

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中...

    讯时新闻管理系统源码 3.5

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及'从word中粘贴...

    node.js下when.js 的异步编程实践

    我们通过三个任务:读取 RSS 地址、获取 RSS 内容、保存 RSS 内容到文件来展示两种不同的异步编程方法。 首先,传统的回调方式实现这三个任务是逐个顺序嵌套的,例如在第一个任务完成后调用第二个任务,然后在第二...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    /rss.js JavaScript脚本文件 第25章(/ch25) 程序描述:本章将仿照Google Suggest,使用Ajax技术实现动态获取搜索提示的功能。当输入搜索关键字时,自动向服务器发送请求,查询相关的关键字,并及时提示...

    基于XML的WEB开发教程

    解析XML文档有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个XML文档加载到内存中,形成一个树状结构,允许开发者随机访问任何部分。SAX是一种事件驱动的解析方式,它逐行读取...

    详解Node.js串行化流程控制

    2. 读取RSS订阅列表:`readRSSFile`函数读取并解析配置文件,随机选择一个订阅源。 3. 获取RSS数据:`downloadRSSFeed`函数向随机选择的预定源发送HTTP请求,获取数据。 4. 解析RSS数据:`parseRSSFeed`函数将RSS...

    讯时网站管理系统CMS v3.9

    3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及'从word中粘贴...

    【卷一/共两卷】AJAX实战pdf高清版90M

    第1章 一种新的Web设计方法 1.1 为什么需要Ajax富客户端? 1.1.1 比较用户体验 1.1.2 网络延迟 1.1.3 异步交互 1.1.4 独占或瞬态的使用模式 1.1.5 忘掉Web 1.2 Aiax的四个基本原则 1.2.1 浏览器中的是应用而不是内容 ...

Global site tag (gtag.js) - Google Analytics