Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Head Probleme (https://www.delphipraxis.net/129663-indy-head-probleme.html)

blink182 23. Feb 2009 14:21


Indy Head Probleme
 
Hiho zusammen,
hab mir den Code aus der Code-Lib für den Download mit Indy und der Fortschrittsanzeige geholt http://www.delphipraxis.net/internal...ct.php?t=56872 und möchte nun damit ein Youtube-Video runterladen.
Den Link hol ich hiermit: http://www.delphi-forum.de/viewtopic...0a3220ee5c7fad. Lass nur den Link als Result ausgeben ohne nie runterzuladen.

An dem Code aus der Code-Lib
Delphi-Quellcode:
  Status.Caption := 'Prüfe Header';
  // Durch die zwei nächsten Befehle wird die Größe ermittelt und ihn der Variable BytesInsgesamt abgespeichert
  IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
  IdHttp.HandleRedirects:=true;
  IdHTTP.Head(Edit1.text);
hab ich noch was kleines geändert. Aber jedesmal kommt ein "Read Timeout", da die URL nicht die direkte URL zu dem Video ist sondern eine Weiterleitung.
Bsp: http://www.youtube.com/watch?v=-xEzGIuY7kw -> http://de.youtube.com/get_video?vide...blwwa2-_4Cw7c= -> http://v12.cache.googlevideo.com/get...y=yt1&ipbits=0

Der 2. Link wird im IdHttp.Head abgefragt, da kommt es dann aber zu dem besagten Error. Wenn ich den 3. Link eingebe funktioniert das Runterladen. Hat jmd eine Idee wenn ich an die URL komme, bzw das HandleRedirects auch Head beeinflusst?
MfG blink182

fkerber 23. Feb 2009 14:26

Re: Indy Head Probleme
 
Hi!

Bist du sicher, dass es nicht ein Problem mit YouTube ist? (Also ein Schutzmechanismus z.B.)

In dem Thread hier, solltest du vllt. Infos finden - da waren auch so Sachen mit Signatur u.ä., was Youtube mittlerweile so eingeführt hat:
http://www.delphipraxis.net/internal...t.php?t=135809


Ciao, Frederic

blink182 23. Feb 2009 14:30

Re: Indy Head Probleme
 
ne das klappt ja eigentlich mit dem Runterladen. Wenn ich es ohne die Downloadanzeige mache, wird das Video auch geladen. Aber ich werd mal schauen, danke.

fkerber 23. Feb 2009 14:33

Re: Indy Head Probleme
 
Hi!

Also du hast einen funktionierenden Download, aber ohne Indy oder wie?
Und du willst nur die Fortschrittsanzeige einbinden?


Ciao, Frederic

blink182 23. Feb 2009 14:36

Re: Indy Head Probleme
 
mit Indy funktioniert der download an sich.

Zitat:

Zitat von http://www.delphi-forum.de/viewtopic.php?p=550387&sid=3da0da5060469fb20b0a322 0ee5c7fad
Delphi-Quellcode:
procedure GetYoutubeDownloadURL(URL: string);
var
  HTTP: TIdHTTP;
  Quelltext: string;
  VideoID: string;
  T: string;
  Pos1: integer;
begin
  HTTP := TIdHTTP.Create(nil);
  HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
  Http.HandleRedirects:=true;
  Quelltext := HTTP.Get(URL);
  //Titel herausfiltern
//  Download.Titel := Copy(Quelltext,Pos('<title>',Quelltext)+7,Pos('</title>', Quelltext)-Pos('<title>', Quelltext)-7);
  //VideoID herausfiltern
  VideoID := Copy(Quelltext,Pos('video_id', Quelltext)+12,Pos('video_id', Quelltext)+0-Pos('video_id', Quelltext)+11);
  //T herausfiltern
  Pos1 := Pos('"t": "', Quelltext)+6;
  T := Copy(Quelltext, Pos1,PosEx('"',Quelltext,Pos1+1)-Pos1);

  try
    HTTP.Get('http://de.youtube.com/get_video?video_id='+VideoID+'&t='+T);
  except

  end;

//  Download.URL := HTTP.Response.Location;

  HTTP.Free;
end;

so klappt es z.b.
ja und ich möchte eigentlich nur die Fortschrittsanzeige einbinden.

blink182 26. Feb 2009 15:22

Re: Indy Head Probleme
 
*push*

nahpets 26. Feb 2009 15:43

Re: Indy Head Probleme
 
Hallo,

für den Fortschritt kannst Du doch OnStatus, OnWorkBegin, OnWork und OnWorkEnd benutzen. Habe mal eben was zusammengedaddelt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  Memo1.Lines.Clear;
  IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
  IdHttp.HandleRedirects := True;
  IdHTTP.Head(Edit1.text);
  IdHTTP.Get(Edit1.text);
  IdHTTP.Disconnect;
  Screen.Cursor := crDefault;
end;

procedure TForm1.IdHTTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: String);
begin
  Statusbar1.SimpleText := AStatusText;
  Memo1.Lines.Add(AStatusText);
end;

procedure TForm1.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
  Memo1.Lines.Add('WorkBegin: WorkCountMax: ' + IntToStr(AWorkCountMax));
end;

procedure TForm1.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
  Memo1.Lines.Add('WorkCount: ' + IntToStr(AWorkCount));
end;

procedure TForm1.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  Memo1.Lines.Add('WorkEnd:');
  Statusbar1.SimpleText := 'Habe fertig';
end;
In der Progressbar sieht man schön den Balken laufen.
[edit]hat Schreibfehler gefunden[/edit]

blink182 26. Feb 2009 16:12

Re: Indy Head Probleme
 
mhm okay danke. Mich wundert nur, warum er 2 mal versucht eine Verbindung aufzubauen, auch wenn ich die Head-Abfrage rausgenommen hab. Aber es scheint so zu klappen. Mein eigentliches Problem ist jedoch noch nicht gelöst.

Es geht mir darum, dass ich bei den
Delphi-Quellcode:
IdHttp.Head(Edit1.text);
einen Fehler bekomme, da es zu einem Timeout-Error kommt.
Diesen Error bekomm ich da ich eine URL eingebe, die wohl weitergeleitet wird. Da es um Youtube-Videos geht, erhalte ich also nur die Weiterleitungsurl aus dem Video http://de.youtube.com/get_video?vide...blwwa2-_4Cw7c= . Da ich aber für die Abfrage diese http://v12.cache.googlevideo.com/get...y=yt1&ipbits=0 URL benötige, diese mir aber nicht bekannt ist. Diese wird wohl temporär erzeugt. Um somit an die Header-Informationen zu kommen bräuchte ich ein
Delphi-Quellcode:
IdHttp.HandleRedirected:=true
für
Delphi-Quellcode:
IdHttp.Head(Edit1.text);
. Das runterladen über die noch nicht weitergeleitete URL funktioniert durch das HandleRedirected.
Was ich mir als Alternative vorstellen könnte wie man das lösen kann, was aber glaub ich unschön ist, ggf. über TWebbrowser oder über ein OLE IE und dann die URL aufrufen und wieder abfangen, aber dann lad ich das video ja fast auch schon wieder doppelt und das ist ja auch nicht unbedingt der Sinn. Vllt geht es ja auch einfacher.

Flocke 26. Feb 2009 16:44

Re: Indy Head Probleme
 
Ich meine mich zu erinnern, dass die Indys in der Version 9 dieses Problem bei jeder Head-Abfrage haben, sofern der Server HTTP/1.1 spricht. Es liegt also wahrscheinlich nicht an deiner speziellen URL mit dem Redirect.

Also entweder auf die 10-er Indys wechseln oder wirklich einfach ein Get machen und dann die Daten wegwerfen, wenn du sie nicht benötigst, oder schon mal zwischenpuffern.

blink182 26. Feb 2009 16:49

Re: Indy Head Probleme
 
okay danke, dann werd ich wohl auf Indy10 umsteigen und hoffen dass es klappt


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.

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