2009-09-10 7 views
3

Je vais utiliser RESTful Web Services et HttpClient pour accéder à Facebook API REST Server.Accès à l'API Facebook en utilisant REST et HttpClient

suis un peu d'un débutant pour se reposer et API Facebook ...

Question (s):

Vérification/Autorisation

(1) Si j'ai une clé de session envoyée par une application client, comment puis-je vérifier et authentifier que l'utilisateur existe et ensuite interroger ses amis du côté serveur?

Comment puis-je accéder à ces points de Facebook: fin RESTful

http://wiki.developers.facebook.com/index.php/Users.getInfo

et

http://wiki.developers.facebook.com/index.php/Friends.getLists

via une requête HTTP GET? Signification, à quoi ressemble l'URL complète, y compris les paramètres? (2) À quoi ressemblerait l'URL RESTful complète pour récupérer les API (que j'ai énumérées ci-dessus)?

Affichage à Wall

(3) Après vérification/autorisation d'un ami, d'interroger les utilisateurs amis, comment (qui API) serait-je utiliser pour un poste mur d'un ami?

(4) Y a-t-il des paramètres supplémentaires que je dois ajouter à l'URL du serveur RESTful de Facebook?

Client HTTP

(5) Dois-je inclure le service Web RESTful appelle à ces API Facebook à l'intérieur de mon programme Java via HttpClient?

Bonne programmation et je vous remercie d'avoir pris le temps de lire ce ...

Répondre

1

Je ne peux pas répondre à toutes vos questions, mais les appels de méthode sont effectués via http://api.facebook.com/restserver.php donc un appel à users.getInfo ressemble à ceci

http://api.facebook.com/restserver.php?method=users.getinfo

Vous devez également transmettre votre clé API et tous les autres paramètres dont la méthode a besoin. Mais plutôt que de faire les appels http vous-même, il doit y avoir une bibliothèque Java qui résume tout cela pour vous. En ce qui concerne l'API REST, il existe un point de terminaison de service Web avec une portée de méthode dans l'URL et tous les appels sont effectués via HTTP GET ou POST. Franchement, c'est RPC sur HTTP et à peu près aussi loin de REST que vous pouvez obtenir (sans jeu de mots!). Facebook devrait changer sa documentation API, c'est tout simplement faux.

0

En termes de création de l'URL, j'ai utilisé ce code qui semble fonctionner plutôt bien ...

import java.math.BigInteger; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Vector; 

// Written by Stuart Davidson, www.spedge.com 
public class JSONComm 
{ 
private final String JSON_URL = "http://api.facebook.com/restserver.php"; 
private final String fbSecretKey = "xxx"; 
private final String fbApiKey = "xxx"; 
private final String fbApiId = "xxx"; 

private int callId = 0; 

public int getNextCall() { callId++; return callId; } 
public String getApiKey() { return fbApiKey; } 
public String getApiId() { return fbApiId; } 

public String getRestURL(HashMap<String, String> args) 
{ 
    String url = JSON_URL + "?"; 
    for(String arg : args.keySet()) { url = url + arg + "=" + args.get(arg) + "&"; } 

    String sig = getMD5Hash(args); 
    url = url + "sig=" + sig; 

    return url; 
} 

public String getMD5Hash(HashMap<String, String> args) 
{ 
    String message = ""; 

    Vector<String> v = new Vector<String>(args.keySet()); 
    Collections.sort(v); 
    Iterator<String> it = v.iterator(); 

    while(it.hasNext()) 
    { 
     String tmp = it.next(); 
     message = message + tmp + "=" + args.get(tmp); 
    } 

    message = message + fbSecretKey; 

    try{ 
     MessageDigest m = MessageDigest.getInstance("MD5"); 
     byte[] data = message.getBytes(); 
     m.update(data,0,data.length); 
     BigInteger i = new BigInteger(1,m.digest()); 
     return String.format("%1$032X", i).toLowerCase(); 
    } 
    catch(NoSuchAlgorithmException nsae){ return ""; } 
} 
} 

Assurez-vous de voir les composants critiques - le fait que les arguments sont classés par ordre alphabétique, et que l'ensemble est chiffré à l'aide MD5, mais la chaîne est cryptée est légèrement différente de celle de la chaîne d'URL.

Notez également que les clés API doivent être remplies!

Ainsi, pour obtenir l'URL pour la méthode User.getInfo et retourner les noms et prénoms, je fais ce qui suit ...

public String getFbURL(String callback, Long playerId) 
{ 
    HashMap<String, String> args = new HashMap<String, String>(); 
    args.put("api_key", jsonComm.getApiKey()); 
    args.put("call_id", "" + jsonComm.getNextCall()); 
    args.put("v", "1.0"); 
    args.put("uids", "" + playerId); 
    args.put("fields", "first_name,last_name"); 
    args.put("format", "JSON"); 
    args.put("method", "Users.getInfo"); 
    args.put("callback", "" + callback); 

    return jsonComm.getRestURL(args); 
} 

Hope this helps :)

Questions connexes