/** * @author acaplan */ package com.flickr4java.flickr.galleries; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.photos.Extras; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; /** * @author acaplan * */ public class GalleriesInterface { public static final String METHOD_ADD_PHOTO = "flickr.galleries.addPhoto"; public static final String METHOD_CREATE = "flickr.galleries.create"; public static final String METHOD_EDIT_META = "flickr.galleries.editMeta"; public static final String METHOD_EDIT_PHOTO = "flickr.galleries.editPhoto"; public static final String METHOD_EDIT_PHOTOS = "flickr.galleries.editPhotos"; public static final String METHOD_GET_INFO = "flickr.galleries.getInfo"; public static final String METHOD_GET_LIST = "flickr.galleries.getList"; public static final String METHOD_GET_LIST_FOR_PHOTO = "flickr.galleries.getListForPhoto"; public static final String METHOD_GET_PHOTOS = "flickr.galleries.getPhotos"; private String apiKey; private String sharedSecret; private Transport transport; /** * Construct a GalleriesInterface. * * @param apiKey * The API key * @param transportAPI * The Transport interface */ public GalleriesInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transportAPI; } /** * Return the list of galleries created by a user. Sorted from newest to oldest. * * @param userId * The user you want to check for * @param perPage * Number of galleries per page * @param page * The page number * @return gallery * @throws FlickrException * * @see <a hrerf="http://www.flickr.com/services/api/flickr.galleries.getList.html">flickr.galleries.getList</a> */ public List<Gallery> getList(String userId, int perPage, int page) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_LIST); parameters.put("user_id", userId); if (perPage > 0) { parameters.put("per_page", String.valueOf(perPage)); } if (page > 0) { parameters.put("page", String.valueOf(page)); } Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element element = response.getPayload(); GalleryList<Gallery> galleries = new GalleryList<Gallery>(); galleries.setPage(element.getAttribute("page")); galleries.setPages(element.getAttribute("pages")); galleries.setPerPage(element.getAttribute("per_page")); galleries.setTotal(element.getAttribute("total")); NodeList galleryNodes = element.getElementsByTagName("gallery"); for (int i = 0; i < galleryNodes.getLength(); i++) { Element galleryElement = (Element) galleryNodes.item(i); Gallery gallery = new Gallery(); gallery.setId(galleryElement.getAttribute("id")); gallery.setUrl(galleryElement.getAttribute("url")); User owner = new User(); owner.setId(galleryElement.getAttribute("owner")); gallery.setOwner(owner); gallery.setCreateDate(galleryElement.getAttribute("date_create")); gallery.setUpdateDate(galleryElement.getAttribute("date_update")); gallery.setPrimaryPhotoId(galleryElement.getAttribute("primary_photo_id")); gallery.setPrimaryPhotoServer(galleryElement.getAttribute("primary_photo_server")); gallery.setPrimaryPhotoFarm(galleryElement.getAttribute("primary_photo_farm")); gallery.setPrimaryPhotoSecret(galleryElement.getAttribute("primary_photo_secret")); gallery.setPhotoCount(galleryElement.getAttribute("count_photos")); gallery.setVideoCount(galleryElement.getAttribute("count_videos")); galleries.add(gallery); } return galleries; } public void addPhoto(String strGalleryId, String photoId, String strComment) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_ADD_PHOTO); parameters.put("gallery_id", strGalleryId); parameters.put("photo_id", photoId); parameters.put("comment", strComment); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public void editMeta(String strGalleryId, String strTitle, String strDescription) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_EDIT_META); parameters.put("title", strTitle); parameters.put("description", strDescription); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public void editPhoto(String strGalleryId, String strPhotoId, String strComment) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_EDIT_PHOTO); parameters.put("gallery_id", strGalleryId); parameters.put("photo_id", strPhotoId); parameters.put("comment", strComment); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public void editPhotos(String strGalleryId, String strPrimaryPhotoId, String strPhotoIds) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_EDIT_PHOTOS); parameters.put("gallery_id", strGalleryId); parameters.put("primary_photo_id", strPrimaryPhotoId); parameters.put("photo_ids", strPhotoIds); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public Gallery getInfo(String strGalleryId) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_INFO); parameters.put("gallery_id", strGalleryId); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element galleryElement = response.getPayload(); Gallery gallery = new Gallery(); gallery.setId(galleryElement.getAttribute("id")); gallery.setUrl(galleryElement.getAttribute("url")); User owner = new User(); owner.setId(galleryElement.getAttribute("owner")); gallery.setOwner(owner); gallery.setCreateDate(galleryElement.getAttribute("date_create")); gallery.setUpdateDate(galleryElement.getAttribute("date_update")); gallery.setPrimaryPhotoId(galleryElement.getAttribute("primary_photo_id")); gallery.setPrimaryPhotoServer(galleryElement.getAttribute("primary_photo_server")); gallery.setPrimaryPhotoFarm(galleryElement.getAttribute("primary_photo_farm")); gallery.setPrimaryPhotoSecret(galleryElement.getAttribute("primary_photo_secret")); gallery.setPhotoCount(galleryElement.getAttribute("count_photos")); gallery.setVideoCount(galleryElement.getAttribute("count_videos")); gallery.setTitle(XMLUtilities.getChildValue(galleryElement, "title")); gallery.setDesc(XMLUtilities.getChildValue(galleryElement, "description")); return gallery; } /** * * @param strTitle * @param strDescription * @param primaryPhotoId * @throws FlickrException */ public Gallery create(String strTitle, String strDescription, String primaryPhotoId) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_CREATE); parameters.put("title", strTitle); parameters.put("description", strDescription); if (primaryPhotoId != null) { parameters.put("primary_photo_id ", primaryPhotoId); } Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element element = response.getPayload(); NodeList galleryNodes = element.getElementsByTagName("gallery"); Element galleryElement = (Element) galleryNodes.item(0); Gallery gallery = new Gallery(); gallery.setId(galleryElement.getAttribute("id")); gallery.setUrl(galleryElement.getAttribute("url")); gallery.setTitle(strTitle); gallery.setDesc(strDescription); return gallery; } /** * Get the photos for the specified gallery * * This method does not require authentication. * * @param galleryId * The group ID * @param extras * Set of extra-attributes to include (may be null) * @param perPage * The number of photos per page (0 to ignore) * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects * @throws FlickrException */ public PhotoList<Photo> getPhotos(String galleryId, Set<String> extras, int perPage, int page) throws FlickrException { PhotoList<Photo> photos = new PhotoList<Photo>(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_PHOTOS); parameters.put("gallery_id", galleryId); if (extras != null) { StringBuffer sb = new StringBuffer(); Iterator<String> it = extras.iterator(); for (int i = 0; it.hasNext(); i++) { if (i > 0) { sb.append(","); } sb.append(it.next()); } parameters.put(Extras.KEY_EXTRAS, sb.toString()); } if (perPage > 0) { parameters.put("per_page", String.valueOf(perPage)); } if (page > 0) { parameters.put("page", String.valueOf(page)); } Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element photosElement = response.getPayload(); photos.setPage(photosElement.getAttribute("page")); photos.setPages(photosElement.getAttribute("pages")); photos.setPerPage(photosElement.getAttribute("perpage")); photos.setTotal(photosElement.getAttribute("total")); NodeList photoNodes = photosElement.getElementsByTagName("photo"); for (int i = 0; i < photoNodes.getLength(); i++) { Element photoElement = (Element) photoNodes.item(i); Photo photo = new Photo(); photo.setId(photoElement.getAttribute("id")); photo.setSecret(photoElement.getAttribute("secret")); User owner = new User(); owner.setId(photoElement.getAttribute("owner")); photo.setOwner(owner); photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); photo.setServer(photoElement.getAttribute("server")); photo.setFarm(photoElement.getAttribute("farm")); photo.setTitle(photoElement.getAttribute("title")); photo.setPublicFlag("1".equals(photoElement.getAttribute("ispublic"))); photo.setFriendFlag("1".equals(photoElement.getAttribute("isfriend"))); photo.setFamilyFlag("1".equals(photoElement.getAttribute("isfamily"))); photo.setPrimary("1".equals(photoElement.getAttribute("is_primary"))); photo.setComments(photoElement.getAttribute("has_comment")); photos.add(photo); } return photos; } /** * * This method does not require authentication. * * @param photoId * The photo ID * @param perPage * The number of photos per page (0 to ignore) * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects * @throws FlickrException */ public PhotoList<Photo> getListForPhoto(String photoId, int perPage, int page) throws FlickrException { PhotoList<Photo> photos = new PhotoList<Photo>(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_LIST_FOR_PHOTO); parameters.put("photo_id", photoId); if (perPage > 0) { parameters.put("per_page", String.valueOf(perPage)); } if (page > 0) { parameters.put("page", String.valueOf(page)); } Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element photosElement = response.getPayload(); photos.setPage(photosElement.getAttribute("page")); photos.setPages(photosElement.getAttribute("pages")); photos.setPerPage(photosElement.getAttribute("perpage")); photos.setTotal(photosElement.getAttribute("total")); NodeList photoNodes = photosElement.getElementsByTagName("photo"); for (int i = 0; i < photoNodes.getLength(); i++) { Element photoElement = (Element) photoNodes.item(i); Photo photo = new Photo(); photo.setId(photoElement.getAttribute("id")); photo.setSecret(photoElement.getAttribute("secret")); User owner = new User(); owner.setId(photoElement.getAttribute("owner")); photo.setOwner(owner); photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); photo.setServer(photoElement.getAttribute("server")); photo.setFarm(photoElement.getAttribute("farm")); photo.setTitle(photoElement.getAttribute("title")); photo.setPublicFlag("1".equals(photoElement.getAttribute("ispublic"))); photo.setFriendFlag("1".equals(photoElement.getAttribute("isfriend"))); photo.setFamilyFlag("1".equals(photoElement.getAttribute("isfamily"))); photo.setPrimary("1".equals(photoElement.getAttribute("is_primary"))); photo.setComments(photoElement.getAttribute("has_comment")); photos.add(photo); } return photos; } }