2012-04-15 4 views
2

Ich habe einige Vorschläge aus ähnlichen Fragen usw. probiert. Nichts davon hat meiner Situation geholfen.Auf Facebook posten Profilwand + Facebook.py + Python + App Engine

Ich benutze Facebook.py Lizenziert unter der Apache-Lizenz in Google App Engine mit Python-Lösung.

Ich habe das GraphAPI-Objekt mit dem gültigen Zugriffs-Token erstellt, das mir gehörte. Und es wurde in App Engine Protokoll angezeigt:

Graph >>> facebook.GraphAPI object at 0x64cc19e10b2ceb90 

So GraphAPI Objekt erstellt hat,

graph.put_object('Valid Facebook User ID', "feed", 
message="Hello world", link="http://example.com") 

Dies wirft Fehlerprotokoll als solche:

HTTP Error 400: Bad Request: 
Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 701, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/s~/development.358229427391780612/handler/profile_handlers.py", line 401, in get 
    graph.put_object(self.user.user_id, "feed", message="Hello world", link="http://example.com") 
    File "/base/data/home/apps/s~/development.358229427391780612/facebook.py", line 129, in put_object 
    return self.request(parent_object + "/" + connection_name, post_args=data) 
    File "/base/data/home/apps/s~/development.358229427391780612/facebook.py", line 181, in request 
    file = urllib2.urlopen(graphUrl, post_data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 124, in urlopen 
    return _opener.open(url, data) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 387, in open 
    response = meth(req, response) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 498, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 425, in error 
    return self._call_chain(*args) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 360, in _call_chain 
    result = func(*args) 
    File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 506, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 400: Bad Request 

Anfangs war ich Putting viele zusätzliche Daten als Anhang (Link, Beschreibung etc.). Nach dem Reduzieren der Befestigungselemente wirft es jedoch immer noch dieselben Fehler. Und ich benutzte auch die Methode von put_wall_post. Einige haben stattdessen vorgeschlagen, put_object zu verwenden.

Ich habe versucht, viel in Foren zu suchen, konnte aber immer noch nicht die Probleme für einige der Vorschläge lösen.

Irgendeine Idee, was das Hauptproblem ist?

+0

Können Sie andere Graph-API-Aktionen ausführen? Werden nur Feed-Posts für Sie unterbrochen? – snkashis

+0

Ja. Ich habe versucht, das HTTP GET graph.get_object ("mich"), und es gibt mir die Daten zurück. Meintest du andere POST-Methoden? – MrCooL

+0

Ja, jede Art von schreibt. – snkashis

Antwort

1

Ich habe das Problem auf eigene Faust gelöst. Für diejenigen, die immer noch versuchen, dies zu lösen und den gleichen möglichen Fehler zu begegnen, lassen Sie mich die Lösung teilen.

Wie früher weiß ich noch nicht, dass die Erlaubnis, die wir vom Benutzer verlangten, nur für grundlegende Zugangsinformationen gewährt wurde.

Aufgrund der ursprünglichen Lösung von facebook.py:

if response.get("error"): 
      raise GraphAPIError(response["error"]["type"], 
           response["error"]["message"]) 

benutzerdefinierte Ausnahme Anhebung ist immer schlecht, da es nicht die wirkliche Ausnahme widerspiegelt und somit das Debuggen triple härter zu machen. Die ursprüngliche benutzerdefinierte Ausnahme vorgesehen angehoben folgende Ausnahme:

HTTP Error 400: Bad Request 

die oft schlechte URL Form im Zusammenhang usw.

daher auf, dass zu ahnen, änderte ich die Ausnahme:

if response.get("error"): 
    raise 

Mit diesem Es wird die tatsächliche Ausnahme auslösen, die es fängt:

Mit th Eine echte Ausnahme, vermutete ich schnell, das Autorisierungsproblem oder die Facebook-Benutzererlaubnis. Also, zur Lösung dieses ,:

FB.login(function(response) { 
    // handle the response 
}, {scope: 'publish_actions'}); 

Hier gehen Sie, sollte das Problem für die Ausnahme gelöst werden, die HTTP-Fehler wirft 403: Verboten. Cheeeerssss!