我将使用RESTful网络服务和HttpClient访问Facebook服务器。
我有点像新手休息和Facebook API..。
问题:
验证/授权
(1)如果我拥有客户端应用程序发送的会话密钥,如何验证和验证用户的存在,然后在服务器端查询他/她的朋友?
我如何才能访问这些Facebook RESTful端点:
http://wiki.developers.facebook.com/index.php/Users.getInfo
和
http://wiki.developers.facebook.com/index.php/Friends.getLists
通过HTTP请求?也就是说,包含参数的完整URL是什么样子的?
(2)完整的RESTful URL将是什么样子来获取API(我已经列出了)?
贴到朋友的墙上
(3)经过验证/授权,查询用户朋友,我将如何(哪种API)发布到朋友的墙?
(4)我是否需要附加到Facebook RESTful服务器的URL中的其他参数?
HTTP客户端
(5)我是否通过RESTful将对这些Facebook的RESTful web服务调用包括在HttpClient程序中?
编程愉快,谢谢你抽出时间来读这个.
发布于 2009-11-17 07:53:16
我不能回答您所有的问题,但是方法调用是通过http://api.facebook.com/restserver.php进行的,所以对users.getInfo的调用如下所示
http://api.facebook.com/restserver.php?method=users.getinfo
您还需要传递api键和方法所需的任何其他参数。但是,与其自己调用http,还必须有一些Java库为您抽象所有这些。
对于REST有一个web服务端点在URL中定义方法范围,所有调用都是通过HTTP或POST进行的。
坦率地说,这是,离REST尽可能远(没有双关的意思!)Facebook应该修改他们的API文档,这完全是错误的。
发布于 2010-03-07 09:37:06
在创建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键需要填写!
因此,要获取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);
}希望这会有所帮助:)
https://stackoverflow.com/questions/1404028
复制相似问题