June 23, 2008 by Christoff Truter JavaScript
I started my RSS adventures scripting a javascript RSS Reader
and posted it on hotscripts as a download. Most people really liked it, despite
the fact that javascript doesn't allow you to read remote files in certain browsers.
I feel that it would make a lot more sense doing something like this in a server
side language like PHP/C# (which allows it) etc - since rss files are normally remotely
hosted, which defeats the purpose if you cant read them remotely.
If you however want to go this route there is always ways to get around this issue, like
copying the rss file to the server where the script is running on, or more preferrably
making use of a script that acts as a proxy, simply pass your url to the proxy script
and return xml from it.(like you'll see below)
<?php header ("content-type: text/xml"); echo file_get_contents($_REQUEST['url']); ?>
<%@ WebHandler Language="C#" Class="rssremote" %> using System; using System.Web; using System.Xml; using System.IO; public class rssremote : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/xml"; XmlDocument xdoc = new XmlDocument(); xdoc.Load(context.Request.QueryString["url"]); context.Response.Write(xdoc.OuterXml); } public bool IsReusable { get { return false; } } }
<%@ WebHandler Language="VB" Class="rssremote" %> Imports System Imports System.Web Imports System.Xml Imports System.IO Public Class rssremote : Implements IHttpHandler Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest context.Response.ContentType = "text/xml" Dim xdoc As New XmlDocument() xdoc.Load(context.Request.QueryString("url")) context.Response.Write(xdoc.OuterXml) End Sub Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property End Class
function RSS(url) { this.items = new Array(); try { var xmlDoc = (document.all) ? new ActiveXObject("Microsoft.XMLDOM") : document.implementation.createDocument("","",null); xmlDoc.async = false; xmlDoc.load('rssremote.php?url=' + escape(url)); this.title = getElement(xmlDoc, 'title'); this.link = getElement(xmlDoc, 'link'); this.description = getElement(xmlDoc, 'description'); var items = xmlDoc.getElementsByTagName('item'); for (var i = 0; i < items.length; i++) { this.items[i] = new function() { this.title = getElement(items[i], 'title'); this.description = getElement(items[i], 'description'); this.link = getElement(items[i], 'link'); } } } catch(e) { alert(e.message); } function getElement(parent, tagName) { return parent.getElementsByTagName(tagName)[0].firstChild.nodeValue; } }
function RSS(url, elementID) { var html = document.getElementById(elementID); var xmlhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); if (xmlhttp) { html.innerHTML = '<img src="img/ajax-loader.gif" />'; xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState==4) { var html = document.getElementById(elementID); try { html.innerHTML =(xmlhttp.status == 200) ? xmlhttp.responseText : "RSS failed to load, error " + xmlhttp.status; } catch(ex) { html.innerHTML = ex.description; } } } xmlhttp.open("GET", "php/xmlhttp.php?url="+escape(url),true); xmlhttp.send(null); } }
June 23, 2008
RSS - PHP (4, 5) implementationsJune 23, 2008