2012-07-12 6 views
0

J'ai passé la dernière journée à travailler avec un groupe pour créer une application facebook qui calcule le coefficient de cluster d'un utilisateur (une mesure de l'interdépendance de leurs amis.)
Pour accomplir Ceci, j'ai besoin d'obtenir le nombre d'amis communs l'utilisateur avec chacun de leurs amis. Malheureusement, je continue à obtenir un urllib2.HTTPError, et je ne peux pas comprendre ce qui se passe. Vous pouvez accéder à l'application (et au message d'erreur + traceback) au https://gentle-stream-3754.herokuapp.com/.Python - Heroku urllib2.HTTPError

La ligne 168 en particulier faisait partie de la traçabilité. Je sais que le code ci-dessous ne sera probablement pas utile sans contexte, c'est pourquoi j'ai inclus un lien vers l'application.

Cela peut-il poser un problème avec les autorisations d'utilisateur? Runtime?

Toute aide serait appréciée! Merci d'avance!

EDIT: access_token semble être un objet NoneType, mais je ne sais pas exactement pourquoi. Cela pourrait-il causer l'erreur 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) 

Exception: HTTPError: Erreur HTTP 400: Bad Request

Traceback:

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

Pouvez-vous inclure la trace complète et l'exception? – girasquid

+0

Bien sûr! J'aurais dû le faire en premier lieu. MISE À JOUR: Traceback et exception ajoutés. –

Répondre

1

Il ressemble à ceci est un problème avec la bibliothèque facegraph - il est l'envoi d'une demande qui est la réception d'un 400 code d'état. Utilisez vous la dernière version? Est-il possible que quelque chose dans l'API de Facebook ait changé et que facegraph ait des problèmes maintenant?

+0

J'utilise la dernière version, donc je ne pense pas que ce soit une faute de facegraph. Je pense qu'il est plus probable que j'ai fait quelque chose de mal. Je me méfie des lignes 166-167. Après un peu plus de bricolage, j'ai découvert que access_token est un objet NoneType. Le problème est, je ne suis pas exactement sûr pourquoi. –

+1

Il est temps de vérifier ce que get_token() vous envoie. :) – girasquid

+0

get_token() est une fonction fournie par heroku. Voici l'essentiel de celui-ci: –