Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ajax In Action (2006).pdf
Скачиваний:
63
Добавлен:
17.08.2013
Размер:
8.36 Mб
Скачать

504CHAPTER 13

Building stand-alone applications with Ajax

In the last four chapters, we’ve developed a range of neat Ajax applications and shown the client-side and server-side code for each. In this chapter, we don’t need to present you with any server-side code, because we’re not going to write any. This may come as a surprise to most people, but we can run Ajax applications directly against any web server-based stream of data, including those that are generated by third-party applications. We can develop a rich user interface for a web page that acts like a client application.

Many websites offer XML feeds in the formats of Really Simple Syndication (RSS), Resource Descriptor Framework (RDF), or Atom, which are the three most common syndication feeds that we see. The information contained in these syndication feeds can be daily news articles, comics, weblogs (blogs), jokes, weather, and so on. With Ajax we have the ability to get the syndication information without having to visit these websites or buy a client application that will read the XML syndication feeds on our computers.

In this chapter, we develop our own client application, an XML reader that obtains feeds from various websites. It can be run in the browser on any computer that has an active Internet connection.

13.1 Reading information from the outside world

An XML syndication feed consists of articles that are freely available for the public to read and display on other websites. A blog is good example of a syndicated XML feed for our purposes because it is so widely available. These XML feeds are different from plain old articles on a website since they can be shared and displayed in multiple formats. It is like finding a newspaper or magazine that fits perfectly on your table as you eat your morning breakfast. You can eat and read at the same time without having to shift everything around and spilling your coffee. The syndicated feeds can be formatted in any style that fits your needs, allowing you to obtain just the information you want.

We can view the contents of an XML syndication feed in several ways. For instance, for a single blog, we could go to the website where the XML feed is located. To view several feeds at once, we could go to sites such as JavaCrawl.com, which allow us to view multiple XML feeds without going to multiple sites. We can also view the RSS feed in its raw unedited form by directly opening up the path of the XML file directly in our web browser, or we can use downloadable software to organize and format the feeds we want to see.

A new option is to use Ajax to view the syndication feeds. Without Ajax, we were stuck with downloading a client application or having to visit a website to

Reading information from the outside world

505

 

 

grab this information, but with Ajax we do not have to download anything or visit a website. Instead we are able to develop a JavaScript-based RSS reader that can be run directly on our desktop with just a browser. In this chapter, we build an application that obtains multiple RSS feeds from multiple sources and allows us to view them in an orderly fashion. We also integrate transition effects to add to the flashiness of the user interface. But before we develop this application with Ajax, we need to understand the format of an XML feed and where we can find XML feeds.

13.1.1Discovering XML feeds

One of the most popular places to find an XML feed is on a blog. Many people today publish blogs, for all kinds of reasons. They can contain information such as a personal diary, personal musings, news articles, jokes, or technology discussions. Let’s look at one example of a blog by Eric Pascerello, in figure 13.1.

Eric’s blog is accessible, which means that it can be linked to by anyone. While many people simply read it on the JavaRanch site, it can also be accessed as a syndication feed. We can read this feed by accessing it directly in its native XML form, or we can go to other websites (such as JavaLobby) that obtain the syndication feed and display it in their format.

Figure 13.1 Eric Pascarello’s blog, which has an accessible RSS feed

506CHAPTER 13

Building stand-alone applications with Ajax

In figure 13.1, we see in the upper-right corner of the screen that there are links to RSS, RDF, and Atom. As we mentioned earlier, these are the most common XML syndication feeds that we can find.

Each of the syndication feeds has a different XML specification. That means if we were to look at the different XML files, we would see different naming schemes for the elements. Each feed has a specification clarifying what information must be defined in the feed. Since we are dealing with different formats, the easiest way to address it is to pick a single format and design the reader around it.

One of the most popular syndication feeds is Really Simple Syndication, better known as the RSS feed.

13.1.2Examining the RSS structure

Before we create our Ajax XML reader, let’s examine the structure of the RSS file. Knowing the structure allows us to navigate the XML DOM more efficiently to obtain the information that we want to display. The RSS document has two parts: the channel and the items. The channel gives us the information about where the RSS feed is from, and the items are the articles that we can read.

The channel elements

The channel can be considered to be the header information of the RSS feed. The channel elements tell the user where the RSS feed is coming from, what the title of the document is, when it was last updated, and so on. Only a few items are required by the RSS specification, as shown in table 13.1.

Table 13.1 Channel required elements

Element

Description

Example

 

 

 

description

Phrase describing the channel.

Weird thoughts from Eric’s Head

 

 

 

link

The URL to the HTML website referring to

http://radio.javaranch.com/pascarello

 

the channel.

 

 

 

 

title

The name of the channel and how people

Eric’s blog on JavaRanch.com

 

refer to the service. The name should be

 

 

related to the name of the website.

 

 

 

 

The three required elements in table 13.1 give us the basic information about the RSS feed. The RSS feed’s required elements tell us where the RSS channel is from, what the title of the channel is, and what the channel is about. If we want to obtain other information about the RSS feed, we need to check for optional elements.

Reading information from the outside world

507

 

 

The RSS feed can contain any number of the optional channel elements. The RSS feed developer can select none, one, or all 16. The optional elements (table 13.2) give us more options to learn about the feed.

Table 13.2 Optional channel elements

Element

Description

Example

 

 

 

category

Specifies which categories the chan-

Programming

 

nel belongs to.

 

 

 

 

cloud

Allows processes to register with a

 

 

cloud so they can be notified of

 

 

updates to the channel, implementing a

 

 

lightweight publish-subscribe protocol.

 

 

 

 

copyright

The copyright notice for the content in

Eric Pascarello

 

the channel.

 

 

 

 

docs

A URL that points to the documenta-

http://backend.userland.com/rss

 

tion for an RSS feed.

 

 

 

 

generator

A string that indicates what program

Pebble

 

was used to generate the protocol.

 

 

 

 

image

Specifies an image that can be dis-

http://pebble.soundforge.net/common/

 

played along with the feed.

images/powered-by-pebble.gif

 

 

 

language

The language the channel is written in.

En

 

 

 

lastBuildDate

The last time the content was changed.

 

 

 

 

managing editor

Email address for person who is

pascarello@javaranch.com

 

responsible for the editorial content.

 

 

 

 

pubDate

The publication date for the content.

 

 

 

 

rating

The PICS rating for the channel. See

 

 

http://www.w3.org/PICS/.

 

 

 

 

skipDays

Informs aggregators what days they

 

 

can skip checking for updates.

 

 

 

 

skipHours

Informs aggregators what hours they

 

 

can skip checking for updates.

 

 

 

 

textInput

Specifies a text input box that can be

 

 

displayed.

 

 

 

 

continued on next page

508CHAPTER 13

Building stand-alone applications with Ajax

Table 13.2 Optional channel elements (continued)

Element

Description

Example

 

 

 

ttl

Indicates the Time to Live (TTL), or

 

 

number of minutes the channel can be

 

 

cached before it is updated.

 

 

 

 

webmaster

Email address for the person who is

webmaster@javaranch.com

 

responsible for technical issues.

 

 

 

 

Some of the element options include email addresses in case we have problems with the feed’s content or layout. There is also information that explains when the syndication feed is updated.

The channel’s required and optional elements describe the content of the RSS feed so that we can determine the characteristics of the feed. Just like the channel, the item elements have optional elements as well.

The item elements

The RSS feed can contain multiple item elements, similar to the way a newspaper consists of multiple articles. Each item element is required to have at least one of the following two elements: the title or the description. Only one is needed, according to the RSS specifications, but both are allowed in an item element.

There are also eight other optional elements that can be added to the item. Returning to the newspaper analogy, an article normally contains the story, the author, the source, and a title. In the same way, each item element in an RSS feed can have separate titles, authors, sources, and so on. All of the optional elements that are available for the item element are shown in table 13.3.

Table 13.3 Item elements

Element

Description

Example

 

 

 

author

The item author’s

Pascarello@javaranch.com

 

email address

 

 

 

 

category

Includes the item in

Programming

 

one or more catego-

 

 

ries

 

 

 

 

comments

The URL of the page

http://radio.javaranch.com/pascarello/2005/05/25/

 

for comments that

1117043999998.html#comments

 

relates to this item

 

 

 

 

 

 

continued on next page