2015-07-04 11 views
5

Ich habe dies für den besseren Teil eines Tages gewesen, aber habe mit der gleichen Fehler 400 seit geraumer Zeit. Das Ziel der Anwendung besteht im Wesentlichen darin, die ISBN eines Buchs aus der Amazon-Referenz-URL zu analysieren und sie als Referenzschlüssel zum Abrufen von Bildern aus der Amazon Product Advertising-API zu verwenden. Die Webseite ist in Python 3.4 und Django 1.8 geschrieben. Ich habe eine ganze Weile damit verbracht, hier zu recherchieren, und habe mich für die Verwendung von Python-Amazon-Simple-Product-API entschieden, da es das Parsen von Amazon etwas einfacher machen würde.Fehler 400 mit python-amazon-simple-product-api über pythonanywhere

Antworten wie: How to use Python Amazon Simple Product API to get price of a product

Machen Sie es ziemlich einfach erscheinen, aber ich habe es nicht ganz ein Produkt erfolgreich noch Nachschlag bekommen. Hier ist eine Konsole Ausdruck dessen, was meine Methode in der Regel der Fall ist, mit der richtigen ISBN bereits gefüllt:

>>> from amazon.api import AmazonAPI 
>>> access_key='amazon-access-key' 
>>> secret ='amazon-secret-key' 
>>> assoc ='amazon-associate-account-name' 
>>> amazon = AmazonAPI(access_key, secret, assoc) 
>>> product = amazon.lookup(ItemId='1632360705') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/tsuko/.virtualenvs/django17/lib/python3.4/site-packages/amazon/api.py", line 161, in lo 
okup 
    response = self.api.ItemLookup(ResponseGroup=ResponseGroup, **kwargs) 
    File "/home/tsuko/.virtualenvs/django17/lib/python3.4/site-packages/bottlenose/api.py", line 242, i 
n __call__ 
    {'api_url': api_url, 'cache_url': cache_url}) 
    File "/home/tsuko/.virtualenvs/django17/lib/python3.4/site-packages/bottlenose/api.py", line 203, i 
n _call_api 
    return urllib2.urlopen(api_request, timeout=self.Timeout) 
    File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen 
    return opener.open(url, data, timeout) 
    File "/usr/lib/python3.4/urllib/request.py", line 461, in open 
    response = meth(req, response) 
    File "/usr/lib/python3.4/urllib/request.py", line 571, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/lib/python3.4/urllib/request.py", line 499, in error 
    return self._call_chain(*args) 
    File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python3.4/urllib/request.py", line 579, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 400: Bad Request 

Nun ich denke, ich bin gespannt, ob dies eine Marotte mit PythonAnywhere ist, oder wenn ich eine Konfigurationseinstellung in verpasst haben Django? Soweit ich das über AWS und die Amazon Associates Seite feststellen kann, sind meine Schlüssel korrekt. Ich mache mir nicht allzu viele Gedanken über das Parsen an diesem Punkt, ich bekomme nur das Objekt. Ich habe sogar versucht, die API umgehen und nur mit Bottlenose (die die API erweitert), aber ich bekomme den gleichen Fehler 400 Ergebnis.

Ich bin wirklich neu in Django und Amazon API, jede Hilfe wäre willkommen!

+2

Amazon beantwortet Sie mit einem 'Bad Request' Fehler. Das bedeutet, dass Sie wahrscheinlich falsche Informationen senden. Überprüfen Sie Ihre Schlüssel usw. ... – Incognos

Antwort

10

Sie haben Ihr Konto noch immer nicht für den API-Zugriff autorisiert. Um dies zu tun, können Sie gehen zu https://affiliate-program.amazon.com/gp/advertising/api/registration/pipeline.html

+1

Sie waren absolut richtig, danke, dass Sie diesen einfachen Schritt entdeckt haben! Ich entschuldige mich für die verspätete Genehmigung. – tsuko

+0

Ein anderes Problem, das den gleichen Fehler verursachen kann, ist, wenn Sie mehrere AWS-Konten haben und API-Schlüssel für ein Konto verwenden, das mit einer anderen E-Mail registriert ist als die, die Sie für das Partnerprogramm registriert haben. – drcursor

+0

Ich weiß, dass es eine Weile her ist, seit die Antwort, aber ein anderer Punkt könnte sein, dass die API nach .com-Domäne sucht. Wenn Sie also in .co.uk oder .de suchen, müssen Sie zuerst die Region angeben. – Nick