Monday, November 08, 2010 at 12:01 AM.

system.verbs.apps.Flickr.photos.backup

on backup (id, folder) {
	<<Changes
		<<11/23/07; 7:04:57 PM by DW
			<<Return the sub-folder we create, used in the logging code.
		<<11/23/07; 6:23:05 PM by DW
			<<Minor cleanup, eliminate some old debugging code.
		<<11/7/07; 6:59:26 PM by DW
			<<Amazingly, sometimes Flickr doesn't give us the "original" picture in the getSizes call, so I went back to downloading all the sizes they give us. I can't imagine why they aren't giving us the original, we could get it by scraping. Oy.
		<<11/7/07; 6:34:06 PM by DW
			<<Sometimes Flickr doesn't return the originalformat attribute. Instead of getting the file extension there, we get it from the extension of the file we download.
		<<11/5/07; 10:20:50 AM by DW
			<<Only download the Original size, not all the shrunken and squeezed versions.
		<<11/5/07; 9:04:40 AM by DW
			<<Instead of writing an fttb file, which would only be readable by Frontier and its derivatives, convert it to XML, in a format that could be read in any language. 
		<<8/22/07; 9:03:27 PM by DW
			<<Minor tweaks & fixes.
		<<8/22/07; 8:33:55 PM by DW
			<<Created.
				<<http://www.flickr.com/services/api/flickr.photos.getInfo.html
	local (photoinfo, sizes);
	Flickr.photos.getInfo (id, nil, @photoinfo);
	Flickr.photos.getSizes (id, @sizes);
	local (whenCreated = photoinfo.dates.taken);
	bundle { //find folder, by date
		local (day, month, year, hour, minute, second, pc = file.getpathchar ());
		date.get (whenCreated, @day, @month, @year, @hour, @minute, @second);
		on pad (num) {
			return (string.padwithzeros (num, 2))};
		local (fname = photoinfo.title);
		if sizeof (fname) > 31 {
			fname = string.mid (fname, 1, 31)};
		folder = folder + year + pc + pad (month) + pc + pad (day) + pc + fname + pc};
	local (f = folder + "metadata.xml");
	file.surefilepath (f);
	file.writewholefile (f, table.tabletoxml (@photoinfo));
	for adrsize in @sizes {
		local (ext = string.lastfield (adrsize^.source, "."));
		f = folder + nameof (adrsize^) + "." + ext;
		if not file.exists (f) {
			<<msg (f)
			file.writewholefile (f, tcp.httpreadurl (adrsize^.source, flMessages:false));
			file.setcreated (f, whenCreated);
			file.setmodified (f, whenCreated)}};
	file.setcreated (folder, whenCreated);
	file.setmodified (folder, whenCreated);
	return (folder)}
<<bundle //test code
	<<local (folder = "Macintosh HD:Don't Back Up:Flickr backup:", adr)
	<<window.about ()
	<<for adr in @scratchpad.photosrecent
		<<backup (adr^.id, folder)



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.