0

我正在尝试使用以下代码进行 FQL 查询:

def get_postData(to_post, access_token):
    postData = {}
    postData["method"] = "fql.query"
    postData["query"] = to_post
    postData["access_token"] = access_token
    return postData

def make_request(url, to_post, access_token):
    postData = get_postData(to_post, access_token)
    return requests.post(url, data = postData).json()[u'data']

使用 POST 请求并不是文档中最好的记录,我无法让它工作。在方法下指定“fql.query”或“fql”(取自此处的 Javascript 特定示例:如何使用 Facebook Graph API 执行 FQL 查询),我得到响应:

{u'error': {u'message': u'Unsupported method, fql.query', u'code': 100, u'type': u'GraphMethodException'}}

当然,文档中没有涉及到。如果没有该方法规范,我会回来:

{u'error': {u'message': u'Unsupported post request.', u'code': 100, u'type': u'GraphMethodException'}}

文档中也没有涉及到。我无法在这里使用 get 请求(这很简单),因为我正在做一个相当大的查询,目前不会超出 get 请求限制,但在不久的将来很可能会。

感谢您在解决此问题方面提供的任何帮助。

编辑:应该注意我正在提出请求:

https://graph.facebook.com
4

2 回答 2

1

您需要做的就是了解您的请求是如何构建的,如果您了解这一点,那么错误对您来说会更有意义。

postData = {}
postData["method"] = "fql.query"
postData["query"] = to_post
postData["access_token"] = access_token
requests.post(url, data = postData).json()[u'data']

甚至没有运行这个,我知道请求看起来像

POST https://graph.facebook.com/?method=fql.query&query=THE_QUERY&access_token=THE_TOKEN

这不是您提供的文档https://developers.facebook.com/docs/reference/api/batch/method/fql.query中的相对 url 所示的 fql.method 。

删除规范(我不知道您为什么要这样做)显然会导致未知错误,因为这是您现在提出的请求

POST https://graph.facebook.com/?query=THE_QUERY&access_token=THE_TOKEN

正确的请求将是

GET https://api-read.facebook.com/restserver.php?method=fql.query&query=THE_QUERY&access_token=THE_TOKEN

或者

GET https://api.facebook.com/method/fql.query&query=THE_QUERY&access_token=THE_TOKEN

我不完全确定批处理使用哪个端点允许 HTTP POST 到 method/fql.query 所以我不会依赖它,除非你真的在做批处理请求。

最后使用fql.query可能不是最好的方法,因为它正在弃用。

我仍然不确定您的查询为何会如此之长以至于超过 GET 请求限制。考虑重新评估如何将查询构造为多查询或批量查询。

于 2013-06-02T14:25:19.460 回答
1

首先,您要访问哪个 URL?我的意思是,你为什么需要 FQL 的 POST 请求?FQL 用于获取数据,而不是用于发布。

根据文档(https://developers.facebook.com/docs/technical-guides/fql/),您的请求应如下所示:

https://graph.facebook.com/fql?q=QUERY&access_token=TOKEN - 其中 QUERY - 是您对 FQL 的 urlencoded 查询,TOKEN - 您的有效访问令牌。

于 2013-06-02T12:48:11.397 回答