Доступ к Facebook API с использованием REST и HttpClient - PullRequest
3 голосов
/ 10 сентября 2009

Я собираюсь использовать веб-службы RESTful и HttpClient для доступа к REST-серверу Facebook API .

Я новичок в API REST и Facebook ...

Вопрос (ы):

Проверка / Авторизация

(1) Если у меня есть сеансовый ключ, отправленный клиентским приложением, как мне проверить и подтвердить, что пользователь существует, а затем запросить его / ее друзей на стороне сервера?

Как мне получить доступ к этим конечным точкам Facebook RESTful:

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

и

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

через HTTP-запрос GET? То есть как выглядит полный URL, включая параметры?

(2) Как будет выглядеть полный RESTful URL для получения API (которые я перечислил выше)?

Размещение на стене друга

(3) После проверки / авторизации, опрашивая друзей у друзей, как (какой API) я буду использовать для публикации на стене друга?

(4) Есть ли дополнительные параметры, которые мне нужно добавить к URL-адресу сервера Facebook RESTful?

HTTP-клиент

(5) Включаю ли я вызовы веб-службы RESTful для этих API-интерфейсов Facebook в мою Java-программу через HttpClient?

Приятного программирования и спасибо, что нашли время, чтобы прочитать это ...

Ответы [ 2 ]

1 голос
/ 17 ноября 2009

Я не могу ответить на все ваши вопросы, но вызовы методов осуществляются через http://api.facebook.com/restserver.php, поэтому вызов users.getInfo выглядит следующим образом

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

Вы также должны передать свой API-ключ и любые другие параметры, необходимые для метода. Но вместо того, чтобы вызывать http самостоятельно, должна быть какая-то библиотека Java, которая абстрагирует все это для вас.

Что касается API REST - есть одна конечная точка веб-службы с областью действия метода в URL, и все вызовы выполняются через HTTP GET или POST.

Честно говоря, это RPC через HTTP и примерно настолько далеко от REST, насколько вы можете получить (не каламбур!). Facebook должен изменить свою документацию по API, это просто неправильно.

0 голосов
/ 07 марта 2010

С точки зрения создания URL, я использовал этот код, который, кажется, работает довольно хорошо ...

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 ""; }
}
}

Убедитесь, что вы видите критические компоненты - тот факт, что аргументы отсортированы в алфавитном порядке и что все это зашифровано с использованием MD5, но зашифрованная строка немного отличается от строки URL.

Также обратите внимание, что ключи API должны быть заполнены!

Итак, чтобы получить URL для метода User.getInfo и вернуть имя и фамилию, я бы сделал следующее ...

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);
}

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...