Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zh/atomgen

Generate new valid atom entries every x minutes (for testing purposes)
https://github.com/zh/atomgen

Last synced: 10 days ago
JSON representation

Generate new valid atom entries every x minutes (for testing purposes)

Awesome Lists containing this project

README

        

atomgen
========

Infinite Atom Entries Generator

Overview
---------

The application providing two feeds. First one generating Atom entries every
minute and the second one - every 5 minutes.
The feeds can be used mostly for testing webhooks, pubsubhubbub etc.

The one minute feed is protected by a secret token in the end of the URL.
If your application is installed for example on URL http://example.com/ ,
the two feeds will be:

http://example.com/feed/1/YouSecretHere (1min feed)
http://example.com/feed/5 (5min feed)

Usage
------

The application is currently deployed on Google AppEngine. You can use the
5 minutes feed for your tests - go to http://pubsubhubbub.appspot.com/subscribe
and subscribe for the http://atomgen.appspot.com/feed/5 topic. This will send
to your subscribers a new Atom entry every 5 minutes.

There is also a FriendFeed group - http://friendfeed.com/atomgen , which is already
subscribed to the 5 minutes feed. You can use it to gen notifications via IM etc.

Implementation details
-----------------------

The feeds have atom:link[@rel="hub"] element and the 5 minutes feed is pinging the
hub on feed generation. By default the Google's reference implementation on URL
http://pubsubhubbub.appspot.com/ is used. Your can change the hub with the
HUB_URL option in the settings.py file.

I tried to make the atom generator a good Internet cityzen by setting up the proper
HTTP headers ('Last-Modified', 'ETag' etc.). 'Etag' header contains the ID of the
last entry, cryptography signed, like suggested in
http://code.google.com/p/pubsubhubbub/wiki/PublisherEfficiency

The current implementation does not use Google Datastore. Feeds are kept only in
the memcached object caching system.

TODO
-----
- Return only new entries for clients asking with 'If-None-Match' header (ETag)