/*
* Copyright (c) 2005 Aetrion LLC.
*/
package com.flickr4java.flickr.blogs;
import com.flickr4java.flickr.FlickrException;
import com.flickr4java.flickr.Response;
import com.flickr4java.flickr.Transport;
import com.flickr4java.flickr.photos.Photo;
import com.flickr4java.flickr.util.XMLUtilities;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Interface for working with Flickr blog configurations.
*
* @author Anthony Eden
* @version $Id: BlogsInterface.java,v 1.14 2009/07/11 20:30:27 x-mago Exp $
*/
public class BlogsInterface {
private static final String METHOD_GET_SERVICES = "flickr.blogs.getServices";
private static final String METHOD_GET_LIST = "flickr.blogs.getList";
private static final String METHOD_POST_PHOTO = "flickr.blogs.postPhoto";
private final String apiKey;
private final String sharedSecret;
private final Transport transportAPI;
public BlogsInterface(String apiKey, String sharedSecret, Transport transport) {
this.apiKey = apiKey;
this.sharedSecret = sharedSecret;
this.transportAPI = transport;
}
/**
* Return a list of Flickr supported blogging services.
*
* This method does not require authentication.
*
* @return List of Services
* @throws FlickrException
*/
public Collection<Service> getServices() throws FlickrException {
List<Service> list = new ArrayList<Service>();
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_SERVICES);
Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element servicesElement = response.getPayload();
NodeList serviceNodes = servicesElement.getElementsByTagName("service");
for (int i = 0; i < serviceNodes.getLength(); i++) {
Element serviceElement = (Element) serviceNodes.item(i);
Service srv = new Service();
srv.setId(serviceElement.getAttribute("id"));
srv.setName(XMLUtilities.getValue(serviceElement));
list.add(srv);
}
return list;
}
/**
* Post the specified photo to a blog. Note that the Photo.title and Photo.description are used for the blog entry title and body respectively.
*
* @param photo
* The photo metadata
* @param blogId
* The blog ID
* @param blogPassword
* The blog password
* @throws FlickrException
*/
public void postPhoto(Photo photo, String blogId, String blogPassword) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_POST_PHOTO);
parameters.put("blog_id", blogId);
parameters.put("photo_id", photo.getId());
parameters.put("title", photo.getTitle());
parameters.put("description", photo.getDescription());
if (blogPassword != null) {
parameters.put("blog_password", blogPassword);
}
Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
}
/**
* Post the specified photo to a blog.
*
* @param photo
* The photo metadata
* @param blogId
* The blog ID
* @throws FlickrException
*/
public void postPhoto(Photo photo, String blogId) throws FlickrException {
postPhoto(photo, blogId, null);
}
/**
* Get the collection of configured blogs for the calling user.
*
* @return The Collection of configured blogs
*/
public Collection<Blog> getList() throws FlickrException {
List<Blog> blogs = new ArrayList<Blog>();
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_LIST);
Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element blogsElement = response.getPayload();
NodeList blogNodes = blogsElement.getElementsByTagName("blog");
for (int i = 0; i < blogNodes.getLength(); i++) {
Element blogElement = (Element) blogNodes.item(i);
Blog blog = new Blog();
blog.setId(blogElement.getAttribute("id"));
blog.setName(blogElement.getAttribute("name"));
blog.setNeedPassword("1".equals(blogElement.getAttribute("needspassword")));
blog.setUrl(blogElement.getAttribute("url"));
blogs.add(blog);
}
return blogs;
}
}