Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   URLDownloadToFile und umlaute (https://www.delphipraxis.net/207081-urldownloadtofile-und-umlaute.html)

venice2 23. Feb 2021 06:58

URLDownloadToFile und umlaute
 
mein Query String.
'https://api.themoviedb.org/3/search/movie?api_key=MyKey&language=de&query=Drachenzähme n leicht gemacht Die guten alten Zeiten'
funktioniert nicht
Hingegen
'https://api.themoviedb.org/3/search/movie?api_key=MyKey&language=de&query=Drachenzaehm en leicht gemacht Die guten alten Zeiten'
schon.

woran kann das liegen. Muss ich da irgendwas besonderes beachten?
Delphi-Quellcode:
function TTheMDB.BuildSearchMovieQuery(MovieTitle: string; UseQueryMode: BOOL): string;
begin

  Result := '';
  if not UseQueryMode then
    Result := 'https://api.themoviedb.org/3/search/movie?api_key='
  else
    Result := 'https://api.themoviedb.org/3/search/tv?api_key=';

  Result := Result + GetApiKey;
  Result := Result + '&language=';
  Result := Result + UseThisLanguage;
  Result := Result + '&query=';
  Result := Result + MovieTitle;
end;
Delphi-Quellcode:
Url := BuildSearchMovieQuery(MovieTitle, QueryMode);

Ist dann der Query String den ich sende.

Furchtbar das die immer an ihrer Webseite Rumschrauben.

DeddyH 23. Feb 2021 07:05

AW: URLDownloadToFile und umlaute
 
https://www.urlencoder.org/ , probier die Möglichkeiten einmal durch, dann weißt Du, wie Du den QueryString kodieren musst.

venice2 23. Feb 2021 07:11

AW: URLDownloadToFile und umlaute
 
Zitat:

Zitat von DeddyH (Beitrag 1483543)
https://www.urlencoder.org/ , probier die Möglichkeiten einmal durch, dann weißt Du, wie Du den QueryString kodieren musst.

Ich habe es schon Danke.. UTF8String!
Hatte vorher mit WideString versucht brachte aber auch nichts.

Delphi-Quellcode:
function TTheMDB.BuildSearchMovieQuery(MovieTitle: string; UseQueryMode: BOOL): UTF8String;
begin

  Result := '';
  if not UseQueryMode then
    Result := 'https://api.themoviedb.org/3/search/movie?api_key='
  else
    Result := 'https://api.themoviedb.org/3/search/tv?api_key=';

  Result := Result + GetApiKey;
  Result := Result + '&language=';
  Result := Result + UseThisLanguage;
  Result := Result + '&query=';
  Result := Result + MovieTitle;
end;

var
  Url: UTF8String;

Michael II 23. Feb 2021 07:18

AW: URLDownloadToFile und umlaute
 
Ich sehe leider nicht, wie/womit du die Daten postest.

Hast du eventuell vergessen den String zu encodieren? Wenn Ja, dann liegt es am ä.

Zum Beispiel mit Indy:

Delphi-Quellcode:
uses IDURI;
...
TIdURI.URLEncode('https://api.themoviedb.org/3/search/movie?api_key=MyKey&language=de&query=Drachenzähme n leicht gemacht Die guten alten Zeiten');

[[ Wenn ein Zeichen z nicht im Bereich 'a'..'z', 'A'..'Z', '0'..'9' liegt (in deinem Beispiel ä), muss z so gesendet werden: ( '%' + IntToHex(ord(z), 2)). ]]

venice2 23. Feb 2021 07:21

AW: URLDownloadToFile und umlaute
 
Zitat:

Zitat von Michael II (Beitrag 1483545)
Ich sehe leider nicht, wie/womit du die Daten postest.

Hast du eventuell vergessen den String zu encodieren? Wenn Ja, dann liegt es am ä.

Zum Beispiel mit Indy:

Delphi-Quellcode:
uses IDURI;
...
TIdURI.URLEncode('https://api.themoviedb.org/3/search/movie?api_key=MyKey&language=de&query=Drachenzähme n leicht gemacht Die guten alten Zeiten');

[[ Wenn ein Zeichen z nicht im Bereich 'a'..'z', 'A'..'Z', '0'..'9' liegt (in deinem Beispiel ä), muss z so gesendet werden: ( '%' + IntToHex(ord(z), 2)). ]]

Steht oben im Beitrag.
Delphi-Quellcode:
if (URLDownloadToFile(nil, PWideChar(Url), PWideChar(TxtFile), 0, nil) = S_OK) then


Danke für die Info mit Utf8String geht es.
Nope geht doch nicht.

Muß mich dann wohl mit dem enkodieren mal beschäftigen.

Sehe gerade du hast die Lösung ja schon gepostet.. ;)
Danke!

generic 23. Feb 2021 15:52

AW: URLDownloadToFile und umlaute
 
Oh schön der Klassiker.

Du übermittelst ja die Daten in der URL. URL sind als ASCII spezifiziert.
D.h. alles was das 8te Bit gesetzt hat, muss URL-Encoded werden.

Dann kommen wir zu dem Encodig der Texte - also UTF-8, UTF-16, UCS oder vielleicht ISO-8859-1 ?



In dieser RFC findet man eine Antwort:
https://tools.ietf.org/html/rfc3986#section-2.5

mytbo 23. Feb 2021 17:12

AW: URLDownloadToFile und umlaute
 
Wenn du mORMot SynCommons verwendest, mache folgendes:
Delphi-Quellcode:
const
  URL_TEMPLATE = 'https://api.themoviedb.org/3/search/movie?api_key=%&language=%&query=%';

var
  url: SockString;
begin
  url := StringToAnsi7(FormatString(URL_TEMPLATE, [GetApiKey, UseThisLanguage, MovieTitle]))
...
Nicht vergessen, je nach verwendeten String-Typ, GetApiKey(), UseThisLanguage() und MovieTitle() notfalls in StringToUtf8() einpacken.

Bis bald...
Thomas

venice2 23. Feb 2021 17:17

AW: URLDownloadToFile und umlaute
 
Zitat:

Zitat von mytbo (Beitrag 1483630)
Wenn du mORMot SynCommons verwendest, mache folgendes:
Delphi-Quellcode:
const
  URL_TEMPLATE = 'https://api.themoviedb.org/3/search/movie?api_key=%&language=%&query=%';

var
  url: SockString;
begin
  url := StringToAnsi7(FormatString(URL_TEMPLATE, [GetApiKey, UseThisLanguage, MovieTitle]))
...
Nicht vergessen, je nach verwendeten String-Typ, GetApiKey(), UseThisLanguage() und MovieTitle() notfalls in StringToUtf8() einpacken.

Bis bald...
Thomas

Danke.. Ich habe meinen eigenen Parser für JSon für den TMDB Support. (Mit kleinen problemen)
Ich würde das gerne auf mORMot SynCommons portieren aber im Moment etwas zu hoch für mich.
Die Idee Ansicht ist aber :thumb:

mytbo 23. Feb 2021 17:39

AW: URLDownloadToFile und umlaute
 
Zitat:

Zitat von venice2 (Beitrag 1483633)
Danke.. Ich habe meinen eigenen Parser für JSon für den TMDB Support.

Es geht nicht um die JSON Funktionen in SynCommons, sondern hier um die Funktion StringToAnsi7(). Damit passt die URL-Codierung. Probiere mein Beispiel einfach mal aus.

Bis bald...
Thomas

venice2 23. Feb 2021 17:50

AW: URLDownloadToFile und umlaute
 
Zitat:

Zitat von mytbo (Beitrag 1483637)
Zitat:

Zitat von venice2 (Beitrag 1483633)
Danke.. Ich habe meinen eigenen Parser für JSon für den TMDB Support.

Es geht nicht um die JSON Funktionen in SynCommons, sondern hier um die Funktion StringToAnsi7(). Damit passt die URL-Codierung. Probiere mein Beispiel einfach mal aus.

Bis bald...
Thomas

Ok werde es mal testen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz