Ich habe eine Website (www.7bks.com), wo Leute Buchlisten erstellen. Es ist im Moment ziemlich einfach. Ich verwende bereits die Amazon API, um Buchinformationen, Bilder usw. auf die Website zu ziehen.Etwas sinnvolles mit Amazon tun BrowseNodes API
Was ich tun möchte, ist irgendwie die Amazon API verwenden, um Kategorie und/oder Tag-Daten zurückziehen, um eine Möglichkeit zum Durchsuchen von Listen auf meiner Website zu erstellen. Leider ist die tag api Methode nicht mehr verfügbar.
Der wahrscheinlichste Kandidat ist die BrowseNodes Methode des Amazon-API (http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/BrowseNodesResponseGroup.html), aber die Daten von diesem Aufruf zurückgegeben wird, ist ziemlich unsinnig und ich hoffte, wir könnten unsere Köpfe zusammensetzen und herausfinden, wie wir es verstehen können.
Hier ist eine Google-Tabelle, um Ihnen die Art von Daten zu zeigen, die ich bekomme. Ich nahm eine Beispielliste (http://www.7bks.com/list/549002) und lief die drei Bücher über das BrowseNodes API:
in der Liste der Suche als Mensch nicht tun müssen wissen, was die Bücher sind, um zu sehen, dass es wahrscheinlich die Liste über Sci-Fi und Fantasy ist. Das liegt hauptsächlich daran, dass das Auge gut darin ist, bedeutungslose Kategorien wie "Custom Stores" und "Fiction Complete" zu verwerfen.
Ich habe versucht, die Liste der Kategorien zu entfernen oder nur die Kategorien zu betrachten, die für alle 3 Bücher erscheinen, aber es sind immer noch ziemlich schlechte Daten. Ich würde Ihre Gedanken lieben, wie ich diese Daten in etwas Sinnvolles für die Benutzer verwandeln kann.
Mein bester Gedanke ist bisher, nur die Daten zu scannen und zu einer fest codierten Liste zu passen. So etwas wie:
wenn Count ("Science-Fiction & fantasy")> 3 dann Liste ist sci fi wenn Count ("Business Finance & Gesetz")> 3 dann Liste ist Geschäft
usw.
Dies ist jedoch sehr starr und idealerweise möchte ich etwas flexibler/leistungsfähiger etwas bauen.
Alle Vorschläge willkommen.
Ich denke, das ist eine High-Level-Frage so sollte nicht von WIE ich die API aufrufen, aber ich verwende Python/Appengine/Webapp.
Dank
Tom
UPDATE nach viel Hämmern von Kopf gegen Schreibtisch habe ich es geschafft, das Problem dadurch zu meiner Zufriedenheit zu beheben. Es ist nicht so kompliziert, aber ich habe etwas Python-Code zusammengehackt, der das macht, was ich will. Ich freue mich, wenn jemand meinen Code verbessert oder Vorschläge macht. Der Code, der dem Code zugrunde liegt, ist im Prinzip folgende: 1) In der XML-Baumstruktur ist der untere Knoten eines Knotens, der startet (Bücher> Subjekte), die beste Vermutung, worum es in dem Buch eigentlich geht. Z.B. dafür: http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/ gibt es "Science-Fiction" zurück. Bingo. 2) In der Regel gibt es eine Menge guter Informationen weggeworfen, indem wir uns auf nur die Ergebnisse beschränken, die beginnen (Bücher> Thema).Daher 3) Ich versuche, eine Liste ähnlicher Bücher zu bekommen und die Kategorien von ihnen zu ziehen, wenn das scheitert, dann bekomme ich nur die Kategorie, die dem ursprünglichen Buch zugeordnet ist.
Vielleicht am besten erklärt Sie den Code, indem Sie wie folgt vor:
#takes as input the xml output of the amazon api browsenodes call
def getcategories(xml):
#fetches the names of all the nodes, stores them in a list
categories = []
for book in xml.getElementsByTagName('BrowseNode'):
category = get_text(book,'Name')
categories.append(category)
#turn the one list into a series of individual lists
#each individual list should be a particular tree from browsenode
#each list will end 'Books'
#the first item in the list should be the bottom of the tree
taglists = []
while 'Books' in categories:
find = categories.index('Books') + 1
list = categories[:find]
taglists.append(list)
for word in list:
categories.remove(word)
#now, we only return the first item from a list which contains 'Subjects'
final = []
for tagset in taglists:
while 'Subjects' in tagset:
final.append(tagset[0])
tagset.pop(tagset.index('Subjects'))
return final
class Browsenodes(webapp.RequestHandler):
def get(self):
#get the asin of the target book
asin = self.request.get('term')
if book_title:
#fetch the amazon key
api = API(AWS_KEY, SECRET_KEY, 'uk', processor=minidom_response_parser)
try:
#try getting a list of similar books - note the response group set to browsenodes
result = api.similarity_lookup(asin, ResponseGroup='BrowseNodes')
except:
#there aren't always a list of similar books, so as a failsafe just get the book I wanted.
result = api.item_lookup(asin, ResponseGroup='BrowseNodes')
final = getcategories(result)
#turn it into a set to de-dupe multiple listings of the same category
self.response.out.write(set(final))
Sie der Ausgang einen Geschmack zu geben:
Buch: http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/
Schlagwörter: Gegenwarts Fiction Produkte Space Opera Science Fiction
http://www.amazon.co.uk/Godel-Escher-Bach-Eternal-anniversary/dp/0140289208/ Psychologie Geschichte der Mathematik Mathematische Logik General AAS Beliebte Mathe Scientific, Technical & Medical Kunst & Musik Philosophy of Mind Amazon Mathe Architektur & Logic Philosophie der Gegenwart: 1900- Logic Classics Physik Metaphysik Philosophie der Physik Allgemeine Technologie Algebraische Zahlentheorie Künstliche Intelligenz Wissenschaftsgeschichte
http://www.amazon.co.uk/Flatland-Romance-Dimensions-Dover-Thrift/dp/048627263X/ Gegenwarts Fiction Philosophie der Mathematik General AAS Beliebte Mathe Philosophie Scientific, Technical & Medical Philosophy of Mind Science Fiction Mathe Zeitgenössische Philosophie: 1900- Algebraische Zahlentheorie Produkte Classics Metaphysische & Visionary Mythen & Märchen Topologie Allgemeine Themen Allgemeine Theoretische Methoden Metaphysik Künstliche Intelligenz Wissenschaftsgeschichte
http://www.amazon.co.uk/Victoria-Condor-Books-Knut-Hamsun/dp/0285647598/ Gegenwarts Fiction Literary Fiction Psychologische General AAS Classics Kurze Storie s