2012-07-12 123 views
0

我已经度过了一天左右的时间与一个团队一起创建了一个计算用户聚类系数(衡量他们的朋友的相互关系的度量)的facebook应用。
为了完成这个,我需要得到用户与他们每个朋友的共同朋友的数量。不幸的是,我不断得到一个urllib2.HTTPError,我无法弄清楚发生了什么。您可以在https://gentle-stream-3754.herokuapp.com/访问应用程序(以及错误消息+追溯)。Python - Heroku urllib2.HTTPError

168线特别是追踪的一部分。我知道下面的代码最有可能不会没有上下文的帮助,所以这就是为什么我已经包含链接到应用程序。

这可能是用户权限问题吗?运行?

任何帮助,将不胜感激!提前致谢!

编辑:access_token似乎是一个NoneType对象,但我不完全确定为什么。这可能会导致urllib2.HTTPError?

164 def clustering_coefficient(): 
165 
166  access_token = get_token() 
167  g = Graph(access_token) 
168  requests = [{'method': 'GET', 'relative_url': 'me/mutualfriends/%s' % x['id']} for x in g.me.friends()['data']] 
169  k_v = len(requests) 
170  if k_v < 2: 
171   return 0.0 
172 
173  n_v = 0 
174  REQS_PER_POST = 50 
175  for i in range((k_v // REQS_PER_POST)+1): 
176   result = g.post(batch=json.dumps(requests[i*REQS_PER_POST:(i+1)*REQS_PER_POST])) 
177   for r in result: 
178    body = json.loads(r['body']) 
179    n_v += len(body['data']) 
180 
181  return 1.0 * n_v/k_v/ (k_v-1) 

异常:HTTPError:HTTP错误400:错误的请求

回溯:

Traceback (most recent call last) 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1306, in __call__ 
return self.wsgi_app(environ, start_response) 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1294, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1292, in wsgi_app 
response = self.full_dispatch_request() 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1062, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1060, in full_dispatch_request 
rv = self.dispatch_request() 
File "/app/lib/python2.7/site-packages/flask/app.py", line 1047, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "/app/exampleapp.py", line 168, in clustering_coefficient 
requests = [{'method': 'GET', 'relative_url': 'me/mutualfriends/%s' % x['id']} for x in g.me.friends()['data']] 
File "/app/lib/python2.7/site-packages/facegraph/graph.py", line 157, in __call__ 
data = json.loads(self.fetch(self.url | params)) 
File "/app/lib/python2.7/site-packages/facegraph/graph.py", line 203, in fetch 
conn = urllib2.urlopen(url, data=data) 
File "/usr/local/lib/python2.7/urllib2.py", line 126, in urlopen 
return _opener.open(url, data, timeout) 
File "/usr/local/lib/python2.7/urllib2.py", line 400, in open 
response = meth(req, response) 
File "/usr/local/lib/python2.7/urllib2.py", line 513, in http_response 
'http', request, response, code, msg, hdrs) 
File "/usr/local/lib/python2.7/urllib2.py", line 438, in error 
return self._call_chain(*args) 
File "/usr/local/lib/python2.7/urllib2.py", line 372, in _call_chain 
result = func(*args) 
File "/usr/local/lib/python2.7/urllib2.py", line 521, in http_error_default 
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
+1

你可以包含完整的回溯和异常吗? – girasquid 2012-07-12 16:23:53

+0

当然!首先,我应该做到这一点。 更新:添加追溯和异常。 – 2012-07-12 17:18:13

回答

1

它看起来这是与facegraph库中的问题 - 它发送一个请求正在接收一个400状态码。你使用的是最新版本吗? Facebook API中是否有可能导致facegraph存在问题?

+0

我正在使用最新版本,所以我不认为这是facegraph的错。我认为我更可能犯了错误。我怀疑166-167行。经过一番修补之后,我发现access_token是一个NoneType对象。问题是,我不确定为什么。 – 2012-07-12 17:59:06

+1

查看get_token()发送给您的时间。 :) – girasquid 2012-07-12 17:59:53

+0

get_token()是一个由heroku提供的函数。下面是它的要点: – 2012-07-12 20:07:56