Grabbing all of the photos and their extended info is only the first step to going off the Flickr grid
. I also have some information about how photos are related to each other that I need to grab. Flickr calls groups of photos sets
, and they're simply a number of photos from your pool of photos that are displayed together. Here's one of my sets at Flickr: New Zealand 2006
On this site (pre-Flickr) I grouped photos into two distinct areas: galleries
and my photoblog
. Like a Flickr set
, a gallery is a group of photos that are related in some way, and my photoblog was for everything else. So the photoblog was a single, large gallery of photos that were only related by the fact that they weren't part of an existing gallery. (Don't worry, this isn't a paradox
Instead of two distinct areas, Flickr says you have one big set of all your photos—your Flickr photostream (much like my photoblog)—and from there you can have sub-sets, or simply sets
. I think this is a much more intuitive approach for photographers. I can look at the entire pool of photos I've taken, and then create associations from that pool at will. Even though this makes sense for the photographer, I'm not sure this is the best approach for viewing
photos. (I'll discuss this more later when I'm building the Web side of this project.)
Anyway, I want to save these photo associations I've already put together at Flickr. I set up two tables for this task: sets
. Every set has a title, description, and FlickrID (just like photos). The Flickr API doesn't provide the date a set was created, but I added a DateCreated
field anyway because this is something I'll want to track eventually. I can either go back and guess on the dates my Flickr sets were created or base the DateCreated
on the photos within the set somehow. The setphotos
table is simply a list of local photoIDs associated with a local SetID. The IsPrimary
field lets you flag one photo to represent the whole set—required when you create a Flickr set. And I added Order
fields for later use. Flickr lets you order the photos arbitrarily within a set, but doesn't expose the ordering system via the API. I'll probably have to do that by hand later.
You can grab the SQL required to create the set tables here: otfg_tables_2.txt
. And you can add it to a MySQL database like this:
shell> mysql -u [username] -p [password] [database name] < otfg_tables_2.txt
Ok, with the data set to be structured, I just needed to reach out and grab it. Once again, here's the covered wagon script I threw together for this: import-flickr-sets.php
Here's what the script does:
- Authenticates the person running the script at Flickr via the browser. (I don't think this is technically required for this step because sets are public, but I had the auth code from the other script so why not?)
- Requests all of the account's sets, and adds the FlickrID, title, and description of each to the sets table.
- Then the script grabs the list of photos in the set, finds the local photoID for that photo, and associates it with the set in the photosets table.
- Finally, a 1 second pause for good API behavior.
Shew! Don't forget to add your local details to the top of the script if you're going to try this out, and then run the script from your browser.
It only took a few seconds to grab all of my set info from Flickr. I had six sets with a total of 88 photos.
One caveat: if you're going to try this out and you have sets with huge numbers of photos in them, say, 100+, this script probably won't work for you. There's no paging going on through the results that come back from the API. You'll need to dig into paging a bit to get it to work. And anyway, who can look through a single set with hundreds of photos in it?
all of the information I need to start displaying my photos. But first, the trouble with comments up next, ugh.