2016-07-02 28 views
8
from amazon.api import AmazonAPI 

AMAZON_ACCESS_KEY = "A******************A" 
AMAZON_SECRET_KEY = "7***********************E" 
AMAZON_ASSOC_TAG = "j*****-20" 

amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, region='US') 
print(amazon) 
#product = amazon.lookup(ItemId='B002RL8FBQ') 

Kiedy uruchomić powyższy kod działa dobrze i mam to wyjście z funkcji drukowania: <amazon.api.AmazonAPI object at 0x7fb6e59f7b38>Amazon błąd API prosty produkt, gdy patrzy się produktowi

Więc wszystko działa w porządku z moim kluczem dostępu, tajny klucz i powiązany tag.

Jednak gdybym un-skomentować ostatnią linię #product = amazon.lookup(ItemId='B00EOE0WKQ') następnie uzyskać ten błąd traceback:

Traceback (most recent call last): 
    File "test.py", line 8, in <module> 
    product = amazon.lookup(ItemId='B00EOE0WKQ') 
    File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/amazon/api.py", line 173, in lookup 
    response = self.api.ItemLookup(ResponseGroup=ResponseGroup, **kwargs) 
    File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/bottlenose/api.py", line 251, in __call__ 
    {'api_url': api_url, 'cache_url': cache_url}) 
    File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/bottlenose/api.py", line 212, in _call_api 
    return urllib2.urlopen(api_request, timeout=self.Timeout) 
    File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen 
    return opener.open(url, data, timeout) 
    File "/usr/lib/python3.4/urllib/request.py", line 469, in open 
    response = meth(req, response) 
    File "/usr/lib/python3.4/urllib/request.py", line 579, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/lib/python3.4/urllib/request.py", line 507, in error 
    return self._call_chain(*args) 
    File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python3.4/urllib/request.py", line 587, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 400: Bad Request 

Śledzę dyspozycję z oficjalnej github tego https://github.com/yoavaviram/python-amazon-simple-product-api oraz kod używam widać Użyłem podtytułu "Usage" na stronie github, więc nie jestem pewien, co się dzieje.

Dla dodatkowej informacji, używam wirtualnego środowiska i pokazać, że mam odpowiednie pakiety zainstalowane tu jest moja obecnie wprowadzone PIP Freeze:

(myvenv) [email protected]_comp:~/Python_projects/amazon_wp$ pip3 freeze 
bottlenose==0.6.3 
lxml==3.6.0 
python-amazon-simple-product-api==2.1.0 
python-dateutil==2.5.3 
six==1.10.0 

Również próbowałem kilku różnych numerów Asin z prawidłowe produkty i pojawia się ten sam komunikat o błędzie.

Używam Pythona 3.4 na ubuntu 14.04

+0

czy masz wiele kont? czy autoryzowałeś konto używane w skrypcie, a nie inne? –

Odpowiedz

-1

Być może trzeba autoryzować swoje konto na API access. Ten step-by-step powinien Cię przez to przejść.

Edit:


mam zainstalowane wszystkie te same wersje i używam tego samego kodu Pythona z własnych kluczy i działa dobrze. Jedyny przypadek, w którym napotkałem ten błąd, był wtedy, gdy nie określiłem regionu (co wyraźnie robisz).

Jedno chciałbym spróbować to, aby dodać następujący kod do skryptu:

rejestrowanie import
logging.basicConfig (poziom = logging.DEBUG)

który powinien wyświetlić następujące zapytanie url:

DEBUG: bottlenose.api: Amazon URL: http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId= & AssociateTag = & ItemId = B00EOE0WKQ & Operacja = itemLookup & ResponseGroup = Duża & S erwis = AWSECommerceService & Datownik = & Version = 01.08.2013 & Podpis =

Możesz odwiedzić ten w swojej przeglądarce i powinien zobacz zwrócony dokument XML. Jeśli się nie uda, to mam nadzieję, że otrzymasz lepszy błąd niż to, co daje pythonlib.

Na przykład, jeśli odwiedzę https://associates-amazon.s3.amazonaws.com/scratchpad/index.html (nigdy nie działa to dla mnie), ale zawiera listę podstawowych adresów URL dla regionu.

tworzę konto kojarzy regionu .pl, więc moje prośby będą ważne tylko dla http://webservices.amazon.co.uk, gdybym zamiast próbować kwerendy http://webservices.amazon.com wtedy widzę:

Podpis życzenie obliczoną nie pasuje do podpisu pod warunkiem, że podałeś go pod . Sprawdź klucz tajnego dostępu AWS i metodę podpisywania. Szczegółowe informacje można znaleźć w dokumentacji serwisowej .

Jeśli masz konto stowarzyszone na amazon.com, wypróbuj je bez określania regionu, ponieważ uważam, że jest to domyślne. Oprócz powyższego sprawdź, czy Twoja maszyna wirtualna ma połączenie z Internetem i jeśli nic więcej nie działa, spróbuj utworzyć inny klucz dostępu i użyj tego.

+0

Dzięki - już przeszedłem przez ten proces, aby uzyskać mój tag assoc, przydzielić dostęp do api klucz dsecret. Może czegoś mi brakuje, ale wcześniej podążałem tymi krokami. –

3

Myślę, że problem dotyczy regionu. Wybierz prawidłową wartość from here. Wyjaśnienie może być takie, że AWS może potwierdzić twoje poświadczenia, ale kiedy przychodzi do "prawdziwego" połączenia, to się nie powiedzie, ponieważ "US" nie jest prawidłowym regionem ...

+0

w moim przypadku ta praca jak w Wielkiej Brytanii musiałem zrobić amazon = AmazonAPI (AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, region = "UK") –