AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idHTTP - GET mit Header und Kompression
Thema durchsuchen
Ansicht
Themen-Optionen

idHTTP - GET mit Header und Kompression

Ein Thema von LWChris · begonnen am 27. Jul 2010 · letzter Beitrag vom 28. Jul 2010
Antwort Antwort
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: idHTTP - GET mit Header und Kompression

  Alt 27. Jul 2010, 06:12
Guten Morgen Chris, herzlich Willommen in der Delphi-PRAXiS!

Bei deiner Funktion prüfst du lediglich, ob <resp stat="ok" im XML-Code enthalten ist und gibst dessen Position zurück.
Juhu Matze, danke für die Grüße.

Hihi, schau nochmal genau hin Ich gebe nicht die Position zurück, sondern "true", wenn der Code mit <resp stat="ok" beginnt - demnach fungiert die Rückgabe als eine Erfolgsmeldung (oder eben nicht^^). Muss ich aber noch in result:=Pos(' stat="ok"',ResponseT)>0 ändern, weil die Reihenfolge wohl doch nicht so festliegt, dass stat das erste Attribut ist.

Wichtiger jedoch:
Wenn ich deinen Code übernehme klappt es mit der XML.

Wow, ich war also gar nicht so weit entfernt von der Lösung wie ich dachte - ich war schlicht und ergreifend zu dumm Ich habe aus der anderen Unit auf DC_HTTP.ResponseText zugegriffen, statt auf die eigentliche Antwort...


Achso, noch eine Frage:

Kann ich statt DC_HTTP.Get(MakeURL('artist', Name), Response); ResponseT := Response.DataString; result := ResponseT; nicht eigentlich auch direkt result := DC_HTTP.Get(MakeURL('artist', Name)); schreiben?
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: idHTTP - GET mit Header und Kompression

  Alt 27. Jul 2010, 11:34
Hallo Chris

Hihi, schau nochmal genau hin Ich gebe nicht die Position zurück, sondern "true" [...]
Stimmt, das wollte ich eigentlich auch schreiben. Im Funktionskopf steht ja "Boolean". War wohl noch nicht ganz wach.

Wow, ich war also gar nicht so weit entfernt von der Lösung wie ich dachte
Jupp.

Achso, noch eine Frage:

Kann ich statt
Delphi-Quellcode:
DC_HTTP.Get(MakeURL('artist', Name), Response);
ResponseT := Response.DataString;
result := ResponseT;
nicht eigentlich auch direkt result := DC_HTTP.Get(MakeURL('artist', Name)); schreiben?
Ja, das geht. So mach ich's immer.
Aber das kannst du auch ganz einfach selbst testen.
  Mit Zitat antworten Zitat
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: idHTTP - GET mit Header und Kompression

  Alt 28. Jul 2010, 13:09
So, danke an Matze, betrachtet das Thema als erledigt (falls es hier so ein System gibt). Jedenfalls für alle anderen (ich hasse es, wenn jemand als letzten Beitrag schreibt "Geht jetzt, danke" aber dann nicht mehr genau wie eigentlich), die ein ähnliches Problem haben (werden - Google wird in Zukunft dann weiterhelfen können), hier nochmal abschließend meine gesamte Discogs Unit, für euch sogar, entgegen meinem üblichen Programmierstil für meine privaten Programme, kommentiert.

Delphi-Quellcode:
unit U_Discogs;

interface

uses
  Classes, SysUtils, idHTTP, IdHTTPHeaderInfo, IdCompressorZLibEx,
  xmldom, XMLIntf, msxmldom, XMLDoc;

var
  Compressor: TIdCompressorZLibEx;
  DC_HTTP: TidHTTP;
  DC_XML: TXMLDocument;

function DC_SearchArtist(Name: String): Boolean;
function DC_SearchRelease(Name: String): Boolean;
// DC_SearchLabel könnte entsprechend hinzugefügt werden
// Ich persönlich brauche es momentan aber nicht

implementation

function MakeURL(SType, STerm: String): String;
begin
  STerm:=StringReplace(STerm,' ','+',[rfReplaceAll]);
// Eventuell muss der Suchterm für die API später noch weiter angepasst werden, z. B. mit TIdURI.URLEncode
  result:='http://www.discogs.com/search?type='+SType+'s&q='+STerm+'&f=xml&api_key=<API_Key>'; // URL erzeugen
end;

// Allgemeine Suchfunktion für alle Typen (SType)
function DC_SearchRequest(SType, Name: String): Boolean;
var Response: TStringStream;
begin
  Response := TStringStream.Create('');
  try
    DC_HTTP.Get(MakeURL(SType, Name), Response);
    DC_XML.LoadFromStream(Response,xetUTF_8);
    // Zugriff auf Ergebnis bei erfolgreicher Suche später über DC_XML
  except
    on E: Exception do
      DC_XML.XML.Text:='';
  end;
  Response.Free;
  result:=Pos(' stat="ok"',DC_XML.XML.Text)>0; // Erfolgsbestätigung
end;

// "Weiterleitungen" mit automatischem Suchparameter
// Auf diese Weiterleitungen könnte auch verzichtet werden
// Allerdings gibt es in meinem Projekt viele API-Units, die standardisierte function-Namen verwenden
function DC_SearchArtist(Name: String): Boolean;
begin
  result:=DC_SearchRequest('artist',Name);
end;

function DC_SearchRelease(Name: String): Boolean;
begin
  result:=DC_SearchRequest('release',Name);
end;

// Label-Suche ggf. entsprechend mit 'label' einfügen

// Die Zerlegung des Ergebnisses in meine TArtist, TAlbum und TSong-Klassen fehlt noch

initialization
  DC_HTTP:=TidHTTP.Create; // Allgemeine TidHTTP Komponente der Discogs-Unit
  Compressor:=TIdCompressorZLibEx.Create(DC_HTTP); // Discogs sendet gzip komprimiert
  DC_HTTP.Compressor:=Compressor;
  DC_HTTP.Request.AcceptEncoding:='gzip'; // GET Header mit "Accept-Encoding: gzip" versehen
  DC_XML:=TXMLDocument.Create(''); // Allgemeine TXMLDocument Komponente der Discogs-Unit

finalization
  // Beim Beenden die allgemeinen Objekte wieder freigeben
  DC_XML.Free;
  Compressor.Free;
  DC_HTTP.Free;

end.
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: idHTTP - GET mit Header und Kompression

  Alt 28. Jul 2010, 13:11
Zitat:
für euch sogar, entgegen meinem üblichen Programmierstil für meine privaten Programme, kommentiert.
Sehr löblich
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz