Ich versuche, eine Signatur für das Amazon Product Advertising API zu produzieren, war es ein paar Stunden und bin immer noch ein 403 immer - könnte jemand einen kurzen Blick auf den Code haben und mir sagen, ob ich bin etwas falsch machen bitte?Amazon Product Advertising API Signature
Dies ist die Funktion, die ich verwende, um die Signatur
def create_signature(service, operation, version, search_index, keywords, associate_tag, time_stamp, access_key):
start_string = "GET\n" + \
"webservices.amazon.com\n" + \
"/onca/xml\n" + \
"AWSAccessKeyId=" + access_key + \
"&AssociateTag=" + associate_tag + \
"&Keywords=" + keywords + \
"&Operation=" + operation + \
"&SearchIndex=" + search_index + \
"&Service=" + service + \
"&Timestamp=" + time_stamp + \
"&Version=" + version
dig = hmac.new("MYSECRETID", msg=start_string, digestmod=hashlib.sha256).digest()
sig = urllib.quote_plus(base64.b64encode(dig).decode())
return sig;
Und dies ist die Funktion, die ich die Zeichenfolge für die Anforderung
def ProcessRequest(request_item):
start_string = "http://webservices.amazon.com/onca/xml?" + \
"AWSAccessKeyId=" + request_item.access_key + \
"&AssociateTag=" + request_item.associate_tag + \
"&Keywords=" + request_item.keywords + \
"&Operation=" + request_item.operation + \
"&SearchIndex=" + request_item.search_index + \
"&Service=" + request_item.service + \
"&Timestamp=" + request_item.time_stamp + \
"&Version=" + request_item.version + \
"&Signature=" + request_item.signature
return start_string;
Und das ist der Lauf-Code zurück zum Erstellen
_AWSAccessKeyID = "MY KEY"
_AWSSecretKey= "MY SECRET KEY"
def ProduceTimeStamp():
time = datetime.datetime.now().isoformat()
return time;
item = Class_Request.setup_request("AWSECommerceService", "ItemSearch", "2011-08-01", "Books", "harry%20potter", "PutYourAssociateTagHere", ProduceTimeStamp(), _AWSAccessKeyID)
item2 = Class_Request.ProcessRequest(item)
Ein Beispiel Web-Anfrage, dass bei 403 erzeugt ausspuckt, ist dies: -
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=AKIAIY4QS5QNDAI2NFLA&AssociateTag=PutYourAssociateTagHere&Keywords=harry%20potter&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2015-02-26T23:53:14.330000&Version=2011-08-01&Signature=KpC%2BUsyJcw563LzIgxf7GkYI5IV6EfmC0%2FsH8LuP%2FEk%3D
Es gibt auch einen Halter Klasse ClassRequest genannt, die nur ein Feld für jedes Anforderungsfeld hat
Die Anweisungen, die ich hier gefolgt sind, wenn jemand Interesse geweckt wird: - http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html
Ich hoffe jemand kann helfen , ich bin neu in Python und ein wenig verloren