首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用REST和HttpClient访问Facebook

使用REST和HttpClient访问Facebook
EN

Stack Overflow用户
提问于 2009-09-10 08:21:05
回答 2查看 16.5K关注 0票数 3

我将使用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程序中?

编程愉快,谢谢你抽出时间来读这个.

EN

回答 2

Stack Overflow用户

发布于 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文档,这完全是错误的。

票数 1
EN

Stack Overflow用户

发布于 2010-03-07 09:37:06

在创建URL方面,我使用了这段代码,它似乎运行得很好.

代码语言:javascript
复制
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并返回名字和姓氏,我需要执行以下操作.

代码语言:javascript
复制
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);
}

希望这会有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1404028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档