Blackberry Widget – RSS Parser

Solange ich noch auf meine Zugangsdaten für die Pushservices warte bediene Ich mich momentan anderen Pull Techniken. Eine davon verbreitete Möglichkeit ist dabei RSS. Fast jede Internetseite hat RSS und ggf. noch eine sehr kluge. Normale Browser erlauben keine cross domains. Das heist dass die zu parsende Datei auch local liegen muss und man die nicht erst von einem anderen Server holen. Bei den Widgets gibt es die Möglichkeit cross domains zu benutzen in dem man die gewünschte/n Domains freigibt. Also kann man sich bequem Informationen auf den BB Pullen.

Fangen wir also mit einem normalen RSS an und mal schauen was noch kommt… Ich hab es leider nicht selber geschrieben und weiss nicht mehr wo ich es gefunden habe :( Die Credits gehen also an Anonymous.

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<meta name=”viewport” id=”viewport” content=”initial-scale=1.0,user-scalable=no”>
<title>RSS Beispiel</title>
</head>
<script language=”javascript”  type=”text/javascript”>

var RSSRequestObject = false; // XMLHttpRequest Object
var Backend = ‘http://news.google.de/news?pz=1&cf=all&ned=de&hl=de&q=blackberry&cf=all&output=rss’; // Backend url
window.setInterval(“update_timer()”, 1200000); // update the data every 20 min
RSSRequestObject = new XMLHttpRequest();

/*
* onreadystatechange function
*/
function ReqChange() {

// If data received correctly
if (RSSRequestObject.readyState==4) {

// if data is valid
if (RSSRequestObject.responseText.indexOf(‘invalid’) == -1)
{
// Parsing RSS
var node = RSSRequestObject.responseXML.documentElement;

// Get Channel information
var channel = node.getElementsByTagName(‘channel’).item(0);
var title = channel.getElementsByTagName(‘title’).item(0).firstChild.data;
var link = channel.getElementsByTagName(‘link’).item(0).firstChild.data;

content = ‘<div style=”padding-top:2px; margin-bottom: 1px; background:grey;”></div>’;

// Browse items
var items = channel.getElementsByTagName(‘item’);
for (var n=0; n < items.length; n++)
{
var itemTitle = items[n].getElementsByTagName(‘title’).item(0).firstChild.data;
var itemLink = items[n].getElementsByTagName(‘link’).item(0).firstChild.data;
var itemDesc = items[n].getElementsByTagName(‘description’).item(0).firstChild.data;

content += ‘<a href=”‘+itemLink+'” style=”padding-left: 17px; display: block; background:#fff; text-decoration: none; color: black; “>’+itemTitle+'</a>’;
content += ‘<div style=”margin-left: 15px; padding-top:1px; background:#d5d3d3;>”></div>’;

}

// content += ‘<hr/>’;
// Display the result
document.getElementById(“ajaxreader”).innerHTML = content;

// Tell the reader the everything is done
document.getElementById(“status”).innerHTML = “Done.”;

}
else {
// Tell the reader that there was error requesting data
document.getElementById(“status”).innerHTML = “<div>Error requesting data.<div>”;
}

HideShow(‘status’);
}

}

/*
* Main AJAX RSS reader request
*/
function RSSRequest() {

// change the status to requesting data
HideShow(‘status’);
document.getElementById(“status”).innerHTML = “Requesting data …”;

// Prepare the request
RSSRequestObject.open(“GET”, Backend , true);
// Set the onreadystatechange function
RSSRequestObject.onreadystatechange = ReqChange;
// Send
RSSRequestObject.send(null);
}

/*
* Timer
*/
function update_timer() {
RSSRequest();
}

function HideShow(id){
var el = GetObject(id);
if(el.style.display==”none”)
el.style.display=”;
else
el.style.display=’none’;
}

function GetObject(id){
var el = document.getElementById(id);
return(el);
}

</script>

<body onload=”RSSRequest();”>
<div id=”status” style=”display:none”></div>
<div id=”ajaxreader”></div>

</body>

</html>

Das und noch ein bisschen mehr ist dann auch schon der Sourcecode für die WMLive app. Mir hat das sehr viel geholfen um gefallen an Blackberry Widgets zu bekommen und mal schauen was man noch alles machen kann.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.