Retrieving an atom entry
To retrieve a single entry on a weblog in Atom format, one first needs to discover the URI from which to retrieve the entry. This URI is easily discovered by inspecting an Atom feed. Each <entry> element should contain a link relation entitled “service.edit”. By performing an HTTP GET against this URI, one will be able to retrieve a complete Atom representation of that post or resource.
Finding the service.edit URI for an Entry
The following demonstrates where in an Atom feed document one can find the URI that a client can then fetch a complete representation of an Atom resource contained within that feed. The following is an excerpt from an Atom feed document:
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:thr="http://purl.org/syndication/thread/1.0">
<title>majordojo</title>
<entry>
<title>Implementing James Snell's Atom Thread Extension</title>
<link rel="alternate" type="text/html"
href="http://www.majordojo.com/2006/01/implementing_ja.php" />
<link rel="service.edit" type="application/atom+xml"
href="http://www.somedomain.com/mt/mt-atom.cgi/weblog/blog_id=3/entry_id=1066"
title="Implementing James Snell's Atom Thread Extension" />
<published>2006-01-20T05:02:47Z</published>
<updated>2006-01-20T05:23:19Z</updated>
Notice the element:
<link rel="service.edit" type="application/atom+xml"
href="http://www.somedomain.com/mt/mt-atom.cgi/weblog/blog_id=3/entry_id=1066"
title="Implementing James Snell's Atom Thread Extension" />
The href attribute points to the URI from which you can retrieve a complete representation of this post. Once you have this URI, a client can then perform an HTTP GET against that URI to retrieve a complete Atom representation of the corresponding resource.
Sample Request
GET /t/atom/weblog/blog_id=1/entry_id=3 HTTP/1.1
Host: www.typepad.com
X-WSSE: my credentials
Sample Response
HTTP/1.1 200 Content-Type: application/x.atom+xml
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#">
<title>My First Post</title>
<content mode="xml">Contents of my post</content>
<issued>2003-10-23T18:35:51Z</issued>
<link rel="alternate" type="text/html" href="http://example.typepad.com/weblog/2003/10/my_first_post.html" />
<id>tag:typepad.com,2003:post-3</id>
<link rel="service.edit" href="http://www.typepad.com/t/atom/weblog/blog_id=1/entry_id=3" title="My First Post" type="application/x.atom+xml" />
</entry>
Sample Perl Code
#!/usr/bin/perl
# Code sample for retrieving Atom weblog entries - this is a trivial
# example, and in someways a lot more work than is necessary.
# After all, the feed contains all the data that is necessary, there is
# no need to fetch the feed and then fetch each entry individually...
use XML::Atom::Client;
use XML::Atom::Entry;
my $BLOG_ID = '131501';
my $USERNAME = 'your username';
my $PASSWORD = 'your password';
my $api = XML::Atom::Client->new;
$api->username($USERNAME);
$api->password($PASSWORD);
my $FeedURI = 'http://reesespieces.typepad.com/majordojo/atom.xml';
my $feed = $api->getFeed($FeedURI);
my @entries = $feed->entries;
foreach my $entry (@entries) {
my @links = $entry->link();
my $EditURI;
foreach my $l (@links) {
if ($l->rel eq 'service.edit') {
$EditURI = $l->href;
}
}
my $e = $api->getEntry($EditURI);
print $e->title . "\n";
}