2009-09-10 6 views
3

HttpClientFacebook API REST Server에 액세스하려면 RESTful 웹 서비스를 사용하려고합니다. 다소 초보자의REST와 HttpClient를 사용하는 Facebook API에 대한 액세스

오전 ...

질문 (들) 휴식과 페이스 북의 API에 :

검증/인증을

(1) 나는에 의해 전송 된 세션 키가있는 경우 클라이언트 응용 프로그램, 사용자가 있는지 확인하고 인증 한 다음 서버 측에서 친구를 쿼리하는 방법은 무엇입니까? HTTP를 GET 요청을 통해

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

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

:

어떻게 이러한 페이스 북의 RESTful 끝 지점에 액세스 할 수 있습니까? 의미, 매개 변수를 포함하여 전체 URL이 어떻게 생겼습니까?

(2) 위의 목록에있는 API를 확보하기 위해 전체 RESTful URL은 어떻게 보이겠습니까?

친구의 벽

(3) 후 검증/인증을 게시, 사용자의 친구를 조회, 어떻게 (어떤 API) 나는 친구의 벽에 게시물에 사용해야합니까?

(4) Facebook RESTful 서버의 URL에 추가해야하는 추가 매개 변수가 있습니까?

HTTP 클라이언트

(5) 나는 RESTful 웹 서비스가 HttpClient를 통해 내 자바 프로그램 내부의 이러한 페이스 북의 API 호출을 포함합니까?

해피 프로그래밍 및 ...이 글을 읽을 시간을내어 주셔서 감사합니다

답변

1

나는 모든 질문에 대답 할 수 있지만 메서드 호출이 http://api.facebook.com/restserver.php 그렇게 users.getInfo에 대한 호출이

모양을 통해 만들어집니다

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

또한 API 키와 메서드에 필요한 다른 매개 변수를 전달해야합니다. 하지만 http 호출을하기보다는 모든 자바 라이브러리를 추상화해야합니다.

REST API는 URL에 메소드 스코핑이있는 하나의 웹 서비스 엔드 포인트가 있으며 모든 호출은 HTTP GET 또는 POST를 통해 이루어집니다.

솔직히 말해서 RPC over HTTP와 REST와는 거리가 멀다. Facebook은 API 문서를 변경해야합니다.

0

URL을 만드는 관점에서이 코드를 사용하여 꽤 잘 작동하는 것 같습니다.인수가 알파벳 순으로 정렬되어 있다는 사실, 그리고 모든 일이 MD5를 사용하여 암호화하지만, 암호화 된 문자열이 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 ""; } 
} 
} 

당신이 중요한 구성 요소를 참조하십시오.

또한 API 키를 입력해야합니다.

그래서, 방법 User.getInfo의 URL을 얻을 첫 번째와 마지막 이름을 반환하기 위해, 나는 다음과 같은 ...

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

희망을 줄이는 데 도움이 :)

관련 문제