Metalink is a simple XML format for describing downloads. Most
.metalink files contain mirror lists/p2p (the various ways you can get
a file) and checksums (for file verification). They’re frequently used
for large files like ISOs and also contain chunk checksums for
repairing downloads and other info. But they’re also used by smaller
things like cURL, OpenOffice.org, podcasts, videos, and other stuff.
Close to 20 download programs support Metalink. There’s more info at
Here’s an example ruby-1.8.6-p111.tar.gz.metalink (most would contain
more mirrors, and maybe a description):
Would anyone be interested in working on a Metalink library for Ruby?
Metalinks are very cool. There’s some folks working on a wget
implementation in Ruby, and I had proposed they incorporate metalinks,
I don’t think they’ve done that yet, maybe not ever. Some guy named
Dag Odenhall[1] looks started a project for this on sharesource[2],
but it doesn’t appear to have anything done. I’m sorry I don’t have
time to help you in the near future.
I hadn’t known about metalink4r, even tho there was never a release
it’s at least interesting to know that someone thought about doing it
If this seems like something that you’d be interesting in working on
later, please let me know. Or if you’re just interested in metalinks,
we have a pretty low traffic discussion list at http://groups.google.com/group/metalink-discussion , feel free to join
us.
I would like to help porting my library to Ruby.
That would be a good way to learn it
But I would need someone to help with the trickier parts at least:
reading XML
hash libraries (MD5, SHA-1, SHA-256, maybe ED2K)
HTTP requests and responses including headers
bin2ascii for creating and parsing BitTorrent
The Python code is a bit more than 2000 lines long and I would port
most of them.
That would be a good way to learn it
But I would need someone to help with the trickier parts at least:
reading XML
hash libraries (MD5, SHA-1, SHA-256, maybe ED2K)
HTTP requests and responses including headers
bin2ascii for creating and parsing BitTorrent
The Python code is a bit more than 2000 lines long and I would port
most of them.
None of that’s terribly difficult, I’d be happy to lend a hand (and I
wrote metalink support into an app on the mac, so I at least have a
vague idea of what’s going on )