
import com.aetrion.flickr.Flickr;
import com.aetrion.flickr.people.User;
import com.aetrion.flickr.photos.Photo;
import com.aetrion.flickr.photos.PhotoList;
import com.aetrion.flickr.photos.PhotosInterface;
import com.aetrion.flickr.photos.SearchParameters;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Iterator;

/**
 * @author <a href="mailto:jesse@swank.ca">Jesse Wilson</a>
 */
public class Kwikr {

    private static final String API_KEY = ""; // YOUR API KEY HERE 
    private static final int PHOTOS_PER_SEARCH = 3;

    public static void main(String[] args) throws Exception {
        if(args.length != 1) {
            System.out.println("Usage: Kwikr <username>");
            return;
        }

        Flickr flickr = new Flickr(API_KEY);

        // get the user Id from the username
        String username = args[0];
        User user = flickr.getPeopleInterface().findByUsername(username);
        String userId = user.getId();
        System.out.println("User " + username + " has id \"" + userId + "\"");
        File userDirectory = new File(username);
        userDirectory.mkdirs();

        // prepare our photo search
        SearchParameters usernameSearch = new SearchParameters();
        usernameSearch.setUserId(userId);
        PhotosInterface photosInterface = flickr.getPhotosInterface();

        // continousouly search and write out the results
        int page = 1;
        int totalWritten = 0;
        while(true) {

            // do a query
            PhotoList result = photosInterface.search(usernameSearch, PHOTOS_PER_SEARCH, page);

            // for all photos in the query, write out those photos
            for(Iterator i = result.iterator(); i.hasNext(); ) {
                Photo photo = (Photo)i.next();
                String filename = "flickr_" + photo.getId() + ".png";
                System.out.print(totalWritten + " \"" + filename + "\" downloading...");
                BufferedImage original = photo.getOriginalImage();

                // Save as PNG
                System.out.print("done. Saving...");
                File file = new File(userDirectory, filename);
                ImageIO.write(original, "png", file);
                System.out.print("done.\n");
                totalWritten++;
            }

            // loop if we retrieved a full set of photos
            if(result.size() == PHOTOS_PER_SEARCH) {
                page++;
            } else {
                break;
            }
        }
    }
}
