Descargar foto de facebook en java

Para descargar la foto de un usuario de facebook de java, primero debemos conocer el UID de ese usuario el cual podemos obtener mediante diversos métodos, lo mejor es usar el API de facebook para gestionar los usuarios que queremos usar de esa plataforma; acá nos concentraremos en cómo obtener la foto de un usuario X teniendo en cuenta que facebook efecturá una redirección de URLs antes de entregarte la imagen en cuestión.

La url para descargar una foto luce algo cómo http://graph.facebook.com/1111111/picture?type=normal
Hacer esto es tan simple como el método siguiente:

 

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.imageio.ImageIO;
import org.apache.commons.io.FileUtils;	

/**
 * Clase
 */
public class ImageUtil {
	/**
     * Para descargar foto de facebook.
     * @param uidFacebook
     * @throws Exception 
     */
    public static void descargarFotoFacebook(String uidFacebook) throws Exception {
		//directorio donde almacenará imagen por ejemplo /tmp
        String ruta = Propiedades.getValue("ruta.archivos");
        //verifica si las carpetas existen, en caso contrario las crea
        File rutaNueva = new File(ruta + "/imagen/");
        if (!rutaNueva.exists() || !rutaNueva.isDirectory()) {
            boolean creacion = rutaNueva.mkdirs();
            if (!creacion) {
                throw new Exception("No se pudo crear el directorio de salida "
                        + "de archivos especificado en el archivo de propiedades");
            } else {
                log.info("se creo la carpeta " + ruta + "/imagen/");
            }
        }

		//solicitamos la foto a la API Graph de facebook
        URL website = new URL("http://graph.facebook.com/" + uidFacebook + "/picture?type=normal");
        
        //facebook maneja redirección.
        HttpURLConnection conn = (HttpURLConnection) website.openConnection();
		conn.setReadTimeout(5000);
		conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
		conn.addRequestProperty("User-Agent", "Mozilla");
		conn.addRequestProperty("Referer", "google.com");

		//System.out.println("Request URL ... ");
		boolean redirect = false;

		// normalmente un código 3xx representa redirección
		int status = conn.getResponseCode();
		if (status != HttpURLConnection.HTTP_OK) {
			if (status == HttpURLConnection.HTTP_MOVED_TEMP
				|| status == HttpURLConnection.HTTP_MOVED_PERM
					|| status == HttpURLConnection.HTTP_SEE_OTHER)
			redirect = true;
		}
		//System.out.println("Response Code ... " + status);

		if (redirect) {
			// get redirect url from "location" header field
			String newUrl = conn.getHeaderField("Location");
			//log.info("URL Facebook foto: "+newUrl); puede ser log4j
			URL urlFotoFB = new URL(newUrl);
			//Utilizamos libreria commonsIO de apache para copiar la URL en el directorio antes elegido
			FileUtils.copyURLToFile(urlFotoFB, new File(ruta + "/imagen/" + idUsuario + ".jpg"));
        }
    }
	
}

 

También te podría gustar...

Deja un comentario