Hallo zusammen,
ich habe bereits die ganze Nacht gegooglet und habe mit jetzt entschieden,
DP beizutreten, da ich es ehrlich gesagt für das kompetenteste Forum halte bisher.
Ich hoffe, ihr könnt mir helfen.
Ich möchte gerne die
Discogs API verwenden (
API-Dokumentation falls jemand das Folgende selbst nachlesen will), um (für's erste einmal) Künstler nachzuschlagen.
Die
API verlangt GET Abfragen, im Header "Accept-Encoding: gzip", und die Antwort kommt als gzip komprimiertes
XML. Folgende
Unit habe ich mir bisher dafür zusammengebastelt - leider ohne Erfolg, ich erhalte als Antwort immer "HTTP/1.1 200 OK"; die Bestätigung nützt mir aber nicht viel, ich möchte ja gerne an die Daten.
Vorab-Info, damit ihr euch nicht allzusehr einlesen müsst:
MakeURL erzeugt z. B. einen Link im Format
Code:
http://www.discogs.com/search?type=artists&q=metallica&f=
xml&api_key=<API_Key>
Delphi-Quellcode:
unit U_Discogs;
interface
uses
Classes, SysUtils, idHTTP, IdHTTPHeaderInfo, IdCompressorZLibEx;
var
Compressor: TIdCompressorZLibEx;
DC_HTTP: TidHTTP;
function DC_SearchArtist(
Name:
String): Boolean;
implementation
function MakeURL(SType, STerm:
String):
String;
begin
STerm:=StringReplace(LowerCase(STerm),'
','
+',[rfReplaceAll]);
result:='
http://www.discogs.com/search?type='+SType+'
q='+STerm+'
&f=xml&api_key=<API_Key>';
end;
function DC_SearchArtist(
Name:
String): Boolean;
var Response: TStringStream;
ResponseT:
String;
begin
Response:=TStringStream.Create('
');
try
with DC_HTTP.Request
do
begin
Method:='
GET';
URL:=MakeURL('
artists',
Name);
Host:='
www.discogs.com';
AcceptEncoding:='
gzip';
end;
DC_HTTP.Get(MakeURL('
artists',
Name),Response);
ResponseT:=Response.DataString;
except
on E:
Exception do
begin
ResponseT:='
';
end;
end;
Response.Free;
result:=Pos('
<resp stat="ok"',ResponseT)=1;
end;
initialization
DC_HTTP:=TidHTTP.Create;
Compressor:=TIdCompressorZLibEx.Create(DC_HTTP);
DC_HTTP.Compressor:=Compressor;
finalization
Compressor.Free;
DC_HTTP.Free;
end.
Kann mir jemand helfen, wie ich an die
XML-Daten komme, bzw. sagen, was ich falsch mache? Ich bin noch sehr unerfahren auf dem Gebiet HTTP Get und Post (sowie im Delphi-Umgang mit
XML, aber das ist ja sekundär, es würde mir ja schon reichen, wenn ich das
XML-Ergebnis zunächst mal als Fließtext sehe).
Liegt der Fehler darin, dass ich TStringStream nehme und nicht etwa eine
XML Komponente aus xmldom, XMLIntf, msxmldom bzw. XMLDoc (ich verwende immer alle 4 gleichzeitig, weil ich nie weiß, was wo implementiert ist)?
Ich hoffe, ihr könnt mir helfen.
Übrigens: den
API-Key kann ich euch natürlich leider nicht geben. Aber ich bin gerne bereit, eure Vorschläge jedes mal im Programm auszuprobieren.
P.S.: Die Stichworte sind ja lustig, get ist zu allgemein, neue darf ich nicht verwenden, welche es schon gibt kann ich nicht einsehen. Sollte man vielleicht mal mit Vorschlägen versehen, damit man weiß, welche man verwenden darf.