comment télécharger la photo de profil facebook en java sur le disque de mon ordinateur


J'utilise le code ci-dessous, cela ne fonctionne pas.
lorsque j'utilise imageUrl sur le navigateur, sa redirection quelque part fonctionne.
Mais j'ai n nombre d'id facebook seulement et chaque fois que l'url redirigée est différente.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 import java.net.URL;

public class SaveImageFromUrl {

public static void main(String[] args) throws Exception {
    String imageUrl = "http://graph.facebook.com/67563683055/picture?type=square";
    String destinationFile = "C:\\Users\\emtx\\Desktop\\Nxg-pic.png";

    saveImage(imageUrl, destinationFile);
}

public static void saveImage(String imageUrl, String destinationFile) throws IOException {
    URL url = new URL(imageUrl);
    InputStream is = url.openStream();
    OutputStream os = new FileOutputStream(destinationFile);

    byte[] b = new byte[2048];
    int length;

    while ((length = is.read(b)) != -1) {
        os.write(b, 0, length);
    }

    is.close();
    os.close();
}

}

Author: codePlayer, 2016-02-14

2 answers

En plus de la réponse Phsemos, vous pouvez également désactiver la redirection avec le paramètre redirect et utiliser l'appel d'API suivant pour obtenir l'URL réelle en tant que JSON:

https://graph.facebook.com/67563683055/picture?type=square&redirect=false

Voici à quoi ressemble le JSON:

{
   "data": {
      "is_silhouette": false,
      "url": "https://scontent.xx.fbcdn.net/hprofile-xaf1/v/t1.0-1/c44.44.544.544/s50x50/316295_10151906553973056_2129080216_n.jpg?oh=04888b6ef5d631447227b42d82ebd35d&oe=57250EA4"
   }
}
 0
Author: luschn, 2016-02-14 19:36:42

Adresse que vous utilisez vous redirige vers un autre emplacement. Puisque la classe URL ne vous redirige pas automatiquement ce que vous obtenez est

  • en-têtes contenant des informations sur la redirection (comme Location qui vous pointe vers une nouvelle adresse),
  • et éventuellement body (mais dans ce cas il est vide).

Vous pouvez créer une méthode comme (basée sur: http://www.mkyong.com/java/java-httpurlconnection-follow-redirect-example/)

public static String getFinalLocation(String address) throws IOException{
    URL url = new URL(address);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    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)
        {
            String newLocation = conn.getHeaderField("Location");
            return getFinalLocation(newLocation);
        }
    }
    return address;
}

Et changer votre

URL url = new URL(imageUrl);

À

URL url = new URL(getFinalLocation(imageUrl));
 0
Author: Pshemo, 2016-02-14 19:29:19