 |
| |
|
|
 |
Autor |
Nachricht |
 |
| |
| arne99 |
#1| Verfasst am: 03.07.2007, 07:18 Titel: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 23 Status: offline Beiträge: 158 angemeldet: 11.01.2005 Wohnort: Hamburg Turbo Delphi für Win32

|
Moin, ich brauche mal eure Hilfe
Ich würde gerne wissen wie ich per API auf existierende Cover Arts von iTunes oder WMP zugreifen kann. Wenn nicht vorhanden, würde ich gern diese per Artist und Title Abfrage aus Amazon greifen.
Gibt es schon Möglichkeiten? bzw. Ansätze? Danke
Edit: Habe soeben ein Python Script gefunden, mag wer Ansätze geben es auf Delphi zu übertragen?[b]
C-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · · 30 · · · · 35 · · · · 40 · · · · 45 · · · · 50 · · · · 55 · · · · 60 · · · · 65 · · · · 70 · · · · 75 · · · · 80 · · · · 85 86
| #!/Library/Frameworks/Python.framework/Versions/Current/bin/python
import sys, os, urllib, string, xml.dom.minidom, traceback
class AmazonCoverArt(object):
LICENSE_FILE = "amazonLicense.txt"
BASE_URLS = {
"US":"http://webservices.amazon.com/onca/xml?Service=AWSECommerceService",
"UK":"http://webservices.amazon.co.uk/onca/xml?Service=AWSECommerceService",
"DE":"http://webservices.amazon.de/onca/xml?Service=AWSECommerceService",
"JP":"http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService",
"FR":"http://webservices.amazon.fr/onca/xml?Service=AWSECommerceService",
"CA":"http://webservices.amazon.ca/onca/xml?Service=AWSECommerceService"}
FULL_URL = string.Template(
"${baseURL}&AWSAccessKeyId=${accessKey}&Operation=${operation}&SearchIndex=${searchIndex}&"
+"Title=${title}&Artist=${artist}&Keywords=${keywords}&ResponseGroup=${responseGroup}")
licenseKey = ""
def __init__(self):
if os.access(self.LICENSE_FILE, os.R_OK):
f = open(self.LICENSE_FILE)
self.licenseKey = f.readline().strip()
f.close()
def search(self, artist='', album='', keywords=''):
if self.licenseKey == "": return []
url = self.getURL(artist, album, keywords)
covers = []
c = None
try:
c = urllib.urlopen(url)
xmlStr = c.read()
covers = self.getCovers(xmlStr)
c.close()
except:
if c: c.close()
return covers
def getCovers(self, xmlStr):
covers = []
usedURLs = []
try:
rootNode = xml.dom.minidom.parseString(xmlStr)
#print rootNode.toprettyxml().encode('ascii', 'ignore')
itemNodes = rootNode.getElementsByTagName("Item")
for itemNode in itemNodes:
for tagName in ("SmallImage","MediumImage","LargeImage"):
imageNodes = itemNode.getElementsByTagName(tagName)
for imageNode in imageNodes:
cover = self.getCoverInfo(imageNode)
if cover["url"] not in usedURLs:
covers.append(cover)
usedURLs.append(cover["url"])
except:
traceback.print_exc(file=sys.stdout)
raise
return covers
def getCoverInfo(self, imageNode):
cover = {}
cover["url"] = imageNode.getElementsByTagName("URL")[0].childNodes[0].data
cover["w"] = imageNode.getElementsByTagName("Height")[0].childNodes[0].data
cover["h"] = imageNode.getElementsByTagName("Width")[0].childNodes[0].data
return cover
def getURL(self, artist, album, keywords):
d = {}
d['baseURL'] = self.BASE_URLS['US']
d['accessKey'] = self.licenseKey
d['operation'] = 'ItemSearch'
d['searchIndex'] = 'Music'
d['responseGroup'] = 'Images'
d['keywords'] = urllib.quote_plus(keywords)
d['artist'] = urllib.quote_plus(artist)
d['title'] = urllib.quote_plus(album)
return self.FULL_URL.substitute(d)
def main():
aca = AmazonCoverArt()
covers = aca.search('Elvis Costello', 'My Aim Is True')
for cover in covers:
print cover["url"]
if __name__ == '__main__':
main() |
| |
 // u know? ID Service www.topsta.de
Zuletzt bearbeitet von arne99 am 03.07.2007, 07:23, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| arne99 |
#2| Verfasst am: 03.07.2007, 08:53 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 23 Status: offline Beiträge: 158 angemeldet: 11.01.2005 Wohnort: Hamburg Turbo Delphi für Win32

|
Hi, also nachdem ich noch weiter gesucht habe bin ich nun hier:
Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · · 30 · · 33
| procedure TForm1.SpeedButton2Click(Sender: TObject);
var AmazonService : AmazonSearchPort;
myrequest : KeywordRequest;
ret : ProductInfo;
begin
myrequest := KeywordRequest.Create;
HTTPRio1.WSDLLocation := 'http://soap-eu.amazon.com/schemas3/AmazonWebServices.wsdl';
try
myrequest.keyword := 'Borland';
myrequest.page := '1';
myrequest.mode := 'dvd-de';
myrequest.sort := '+salesrank';
myrequest.tag :='webservices-20';
myrequest.type_ :='lite';
myrequest.devtag := '<meineID>';
myrequest.locale :='de';
ret:=ProductInfo.Create;
try
try
Amazonservice := HTTPRio1 as AmazonSearchPort;
ret:=AmazonService.KeywordSearchRequest(myrequest);
except
exit;
end;
{process Productinfo}
finally
ret.free;
end;
finally
myrequest.free;
end;
end; |
|
Ich bekomme jedoch immer einen BadRequest Exception. Kann mir jemand helfen? |
 // u know? ID Service www.topsta.de |
 |
|
|
|
| |
| CCRDude |
#3| Verfasst am: 03.07.2007, 10:01 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
ehem. Benutzer

|
Sieht auch irgendwie merkwürdig aus, finde ich.
Du weißt zweimal ret etwas zu, denke da ist also schon mindestens ein Speicherleck, zumindest aber ein Zeichen von unvollständigem Verständnis.
Vor allem aber sehe ich nirgendwo, daß Du überhaupt spezifieren würdest, was genau Du suchst? |
|
 |
|
|
|
| |
| arne99 |
#4| Verfasst am: 03.07.2007, 12:14 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 23 Status: offline Beiträge: 158 angemeldet: 11.01.2005 Wohnort: Hamburg Turbo Delphi für Win32

|
Genau hier spezifiziere ich es:
| Delphi-Quellcode: | markieren | myrequest.keyword := 'Borland';
myrequest.page := '1';
myrequest.mode := 'dvd-de';
myrequest.sort := '+salesrank';
myrequest.tag :='webservices-20';
myrequest.type_ :='lite';
myrequest.devtag := '<meineID>';
myrequest.locale :='de'; |
|
Die doppelte Zuweisung von "ret" ist wichtig. Da ich als erstes ein Create der ProductInfo mache, die ich vorher mit der Spezifikation meiner SUchkriterien erstellt habe.
Danach wird das ganze angestoßen. |
 // u know? ID Service www.topsta.de
Zuletzt bearbeitet von arne99 am 03.07.2007, 12:17, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| CCRDude |
#5| Verfasst am: 03.07.2007, 13:25 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
ehem. Benutzer

|
Nun ja, ich geh mal davon aus daß devtag=devtoken, dann sehe ich trotzdem weder ein AsinSearch, UpcSearch, AuthorSearch, ArtistSearch oder wie sie alle heißen? Wußte nicht, daß Amazon jetzt schon eine Glaskugelsuche hat
Wo bitte hat Dein "Create der ProcutInfo" denn die Spezifikation bekommen? Ich sehe da nur ein "Create;" und keine übergebenen Parameter?
Und wo glaubst Du, wird dieses ProductInfo wohl wieder freigegeben?
Aber da Du's eh besser weißt, geh ich jetzt mal |
|
 |
|
|
|
| |
| arne99 |
#6| Verfasst am: 03.07.2007, 14:08 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 23 Status: offline Beiträge: 158 angemeldet: 11.01.2005 Wohnort: Hamburg Turbo Delphi für Win32

|
Bist jetz muksch? Ich bin dankbar fuer jede Hilfe. Wenn du damit schonmal gearbeitest hast, wär es nett wenn du mir deine Ansätze weiterformulierst. Danke sehr. |
 // u know? ID Service www.topsta.de |
 |
|
|
|
| |
| OregonGhost |
#7| Verfasst am: 03.07.2007, 14:28 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 27 Status: offline Beiträge: 1.219 angemeldet: 08.06.2002 Wohnort: Lübeck Delphi 3 Professional

|
CCRDude wollte damit sagen, dass die doppelte Zuweisung an ret nicht sehr sinnvoll zu sein scheint.
Du erzeugst ein Objekt vom Typ ProductInfo, weist die Referenz darauf ret zu, und weist anschließend den Rückgabewert von AmazonService.KeywordSearchRequest ebenfalls ret zu. Das erzeugte Objekt vom Typ ProductInfo geht damit verloren und erzeugt ein Speicherleck. Noch dazu wurde es niemals benutzt. Das sollte alledings nichts mit deinem Fehlerbild zu tun haben.
BadRequest bedeutet, dass die Parameter der Anfrage nicht korrekt sind. Insofern wäre es sinnvoll, die Datenfelder des Requests noch einmal genauer zu untersuchen. Bekommst du keine genaueren Fehlerangaben?
Edit: Laut einem Beispiel, dass ich eben sah, müssen tag und devtag beide identisch sein, halt deine Subscriber-ID. |
 Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Zuletzt bearbeitet von OregonGhost am 03.07.2007, 14:32, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| CCRDude |
#8| Verfasst am: 03.07.2007, 14:30 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
ehem. Benutzer

|
Nur damit wir nicht aneinander vorbeireden: suchst Du nach einer "Borland"-DVD, ist also "Borland" Dein Suchbegriff?
Ich kenne als Namen des Suchparameters halt nicht "Keyword", sondern nur AsinSearch (ISBN-10), UpcSearch (ISBN-13), AuthorSearch, ArtistSearch, ActorSearch, DirectorSearch, ManufacturerSearch und SimilaratiesSearch. Dein Block scheint mit "nur" Keyword etwas anders aufgebaut, als ich das gewohnt bin.
Ok, weiter... Dein Ansatz scheint jetzt über SOAP zu gehen, ist ja auch passend für WebServices. Andererseits hast Du nirgendwo geschrieben, woher diese AmazonSearchPort etc. kommen (als Namen für Klassen folgen die schonmal nicht dem Standard (T am Anfang), daher sehe ich die als irgendwie suspekt an ). Und eigentlich ist das ja auch nichts anderes als ein HTTP-GET plus XML, das auszuwerten ist, und "direkter" ist es vielleicht einfacher zu debuggen.
Hier eine Beispiel-URL:
| Zitat: | | http://xml.amazon.de/onca/xml3?dev-t=XXXXXXXXX&f=xml&mode=music&page=1&locale=de&t=YYYYYYYY&type=lite&v1&ArtistSearch=New%20Model%20Army |
Wobei Du XXXXXXXX durch die ID ersetzt, die Du schon im vorigen Beispiel verwendet hast, und YYYYYYYY durch Deine associate id.
(Anstelle von ArtistSearch kannst Du die oben von mir erwähnten Parameter ausprobieren, diverse andere "mode"-Werte wären baby,books,classical,dvd,electronics,garden,kitchen,magazines,music,pc-hardware,photo,software,tools,toys,vhs,videogames, ...)
Diese URL probierst Du einfach im Browser, schon siehst Du, ob die Anfrage funktioniert (gerade mit meinen beiden IDs getestet, die funktioniert ), und musst den Download nur noch in Dein Programm einbauen (Indy, Synapse, WinInet, wie Du magst) und dann per XMLLib, JclSimpleXml auswerten (zur Not sogar noch schlichter, weil es Dir ja eh nur um die ImageUrlLarge-Zeilen gehen wird). |
|
 |
|
|
|
| |
| made in Germany |
#9| Verfasst am: 03.05.2008, 15:44 Titel: Re: Get Cover Art (Online oder iTunes / WMP) |
 |
 |
 |
|
Mitglied Alter: 21 Status: offline Beiträge: 50 angemeldet: 28.04.2006

|
gibts noch eine andere möglichkeit um auf die daten zuzugreifen oder muss ich mich da anmelden? |
|
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|
| |
|
Du darfst keine Beiträge in dieses Forum schreiben. Du darfst auf Beiträge in diesem Forum nicht antworten. Du darfst Deine Beiträge in diesem Forum nicht bearbeiten. Du darfst Deine Beiträge in diesem Forum nicht löschen. Du darfst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten. Du kannst Dateien in diesem Forum nicht herunterladen.
|
|
 |