1

urlopen 在发布 Open Graph 操作时失败,并显示来自 Facebook 的 500 代码和 '{"error_code":1,"error_msg":"An unknown error occurred"}' 错误。我可以让代码与其他帖子一起使用(例如,使用图形 API 对状态发表评论效果很好)。我也可以使用 curl 让这个动作帖子工作。因此,在发布带有 URL 作为值之一的表单数据时,这似乎是一个 urllib2.urlopen 问题。

与 curl 一起使用的图形 api 帖子:

curl -F 'access_token=nnnnnn' -F 'object=https://abc.com/123' \
'https://graph.facebook.com/me/namespace:action' -k


通过 urllib2 发布相同的 Graph api,它给出了错误:

from urllib2 import urlopen, Request, URLError

request = Request (url='http://graph.facebook.com/me/namespace:action';, 
                   data = urllib.urlencode(
                            {'object':'https://abc.com/123',
                             'access_token':'nnnnnnnn'
                            }, 
                   headers = {'Content-Type': 'application/x-www-form-urlencoded'}
          ) 
response = urlopen (request)

我可能做错了什么?(我是 urllib2.urlopen 的新手。顺便说一句,我最初通过 urlfetch python 模块尝试了 urlfetch.fetch。那也不起作用)。我正在使用这个通过 goole 应用程序引擎。

4

1 回答 1

1

经过大量的挖掘/试错后,终于设法解决了这个问题。

这不是 urllib urlopen 的问题,而是更多的是 Google App Engine 的细微差别,当调用打开的 Graph URL 上的操作帖子时 - 它会导致 Facebook 触发对象 URL 上的“获取”(同步)。

所以本质上是在应用引擎应用程序上调用 get,而活动实例已经在调用 FB 图 URL。我目前正在使用一个未付费的实例,这会导致意外行为,例如 FB 无法通过 OG 帖子(我看到日志中的获取成功通过,而活动帖子,所以不确定是什么导致 FB 失败 - 任何有一个见解,请分享)。

我通过 'taskqueue'ing urlopen/OG-action-post 解决了这个问题 - 当第二次调用它时(FB 显然第一次缓存了对象)它成功了。

如果有人需要更多详细信息,请联系我们,非常乐意为您节省我已经经历的所有时间和痛苦。

于 2012-05-27T18:51:33.007 回答