排查 Facebook graph.put_object 返回错误 400

0 投票
2 回答
1418 浏览
提问于 2025-04-16 09:06

我正在使用Facebook的Python开发工具包,并结合Google App Engine,想要进行一个签到操作:

graph.put_object("me", "checkins", message="Hello, world", place="165039136840558", coordinates='{"latitude":"38.2454064", "longitude":"-122.0434404"}')

但是,这个操作出现了400错误,意思是请求有问题。我似乎无法捕捉到这个错误,以便获取一些重要的信息。

当请求出错时,Facebook应该会返回一个对象,里面有一些信息可以帮助我找出问题所在,但我不太清楚怎么才能获取到这个对象:

{
   "error": {
    "type" : "OAuthException",
    "message" : "An active access token must be used to query information about the current user."
    }
   }

[编辑]

我暂时找到了解决问题的方法,就是:

记录下发送的数据

logging.info("LOG" + str(post_data))

然后使用像Firefox的扩展工具这样的REST客户端重新发起请求。这样我就能得到我需要的信息来继续。不过,如果我能在我的应用里直接获取到错误信息,那就更好了。

2 个回答

1

我遇到了同样的问题,这里是如何获取那个错误信息的方法:

import urllib2

url='https://graph.facebook.com/me/?method=post' # this will 400 b/c it has no auth token.

try:
   resp = urllib2.urlopen(url)
except urllib2.HTTPError as e:
   error_reason = e.read()

然后你可以使用 json 模块来查看 Facebook 发送的错误信息中的 JSON 数据:

json_error = json.loads(error_reason)

确保你使用 json.loads,因为 error_reason 是一个字符串。

2

就像错误信息所说的,你需要创建并使用一个访问令牌(access token)。这里有一些更多的信息。抱歉我还不能“评论”,所以只能回答这个问题。

你可以查看这个链接了解更多内容:http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/

撰写回答