Entwickler-Ecke
Internet / Netzwerk - Youtube link in Download link umwandeln?
jackie05 - Fr 05.09.08 00:49
Titel: Youtube link in Download link umwandeln?
Hallo,
wie kann ich in Delphi einen Youtube link in Download link umwandeln?
Ich wäre euch sehr dankbar, wenn Ihr mir tips geben könnt oder vieleicht ein beispiel Code posten könnt.
MfG
Moderiert von
Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 05.09.2008 um 01:01
Dunkel - Fr 05.09.08 01:06
Hallo!
Öhm, Du möchtest Youtube-Videos runterladen, oder?
jackie05 - Fr 05.09.08 01:47
Ich möchte es nicht runterladen sondern den link in Download link umwandeln mit Delphi.
Es gibt ja einige seiten wie KeepVid... aber ich möchte es in Delphi gerne machen.
Danke schonmal.
MfG
jackie05 - Fr 05.09.08 03:11
Ich hab den Download link jetzt entschlüsselt und zusammen gesetzt.
Funktioniert einwandfrei.
Trotzdem Danke.
MfG
Tilman - Fr 05.09.08 21:28
Ich lade Videos immer mit Flashget runter... gut das nützt dir jetzt nix weil du es mit Delphi machen willst ;) Du könntest den Link an deinen Standard-Browser schicken, der bietet es dir dann als Download an... oder du generierst eine HTML-Seite mit
XML-Daten
1: 2:
| <h3>Video ganz fies loaden</h3> <a href='youtube/bla/link/blubber'>Laden</a> |
und öffnest diese dann im Standardbrowser oder im TWebBrowser...
aber eigentlich müsste es mit Indy trotzdem gehen ^^
SAiBOT - Fr 05.09.08 21:40
Tilman hat folgendes geschrieben: |
aber eigentlich müsste es mit Indy trotzdem gehen ^^ |
So einfach ist es leider nicht.
So gehts:
-IndyHttp->Get (zB "http://www.youtube.com/watch?v=uayowbYqvZA")
-Im Quellcode nach der VideoID und dem "t"-Wert suchen.
daraus ergibt sich dann "http://www.youtube.com/get_video?video_id=uayowbYqvZA&t=OEgsToPDskKCWYdPeRPRda6smL3iWVGb"
-IndyHttp->Get
-Nun folgt eine Exception "See other"
-Der endgültige Dowloadlink befindet sich nun in IndyHttp->Response->Location.
Dieser
Link [
http://evil-soft.blogspot.com/2008/08/clipcommander-13-release.html] könnte vll auch für dich interessant sein.
MfG
Tilman - Fr 05.09.08 21:42
Ja das man den Link umwandeln muss weiß ich, aber der TE hat ja geschrieben dass er das bereits geschafft hat. Dazu benutze ich übrigens immer das FF-Addon "Live HTTP-Headers" (BTW... ist nicht sehr komfortabel, kennt da wer was besseres?).
SAiBOT - Fr 05.09.08 21:48
Tilman hat folgendes geschrieben: |
| Ja das man den Link umwandeln muss weiß ich, aber der TE hat ja geschrieben dass er das bereits geschafft hat. Dazu benutze ich übrigens immer das FF-Addon "Live HTTP-Headers" (BTW... ist nicht sehr komfortabel, kennt da wer was besseres?). |
Wenn du dir seinen und meinen letzten Post genauer ansiehst, wirst du erkennen, dass er es
NICHT geschafft hat an die endgültige URL zu kommen :wink:
Tilman - Fr 05.09.08 21:56
Wir halten also fest: das umwandeln des LInks hast du geschafft. Jetzt habe ich folgendes gemacht:
- Eine TMozillaBrowser-Komponente auf die Form gezogen (müsste aber auch mit TWebBrowser gehen, nur die hab ich nicht installiert). Habe diese moz genannt und sie so eingestellt dass sie unsichtbar ist.
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin moz.Navigate('http://v15.cache.googlevideo.com/get_video?video_id=fEhoBOyfK2w&origin=chi-v240.chi.youtube.com&signature=365FE8B1EE14E74B23F8A51BEE7DCF93D3C43DA9.B777655E18435AE356398367D734A8F7EB4C0BAB&ip=85.179.96.56&ipbits=8&expire=1220665895&key=yt1&sver=2'); end; |
funzt super. Natürlich werde ich gefragt ob ich downloaden will oder nicht.
Wie es mit den Indys steht, ob es da nicht doch irgendwie geht, weiß ich nicht.
Alernativ hast du immer noch die möglichkeit eine HTML-Seite dynamisch zu generieren wie oben genannt und diese in eine Webbrowswer-Kompo einzubinden, so dass der User selbst loaden kann.
SAiBOT - Fr 05.09.08 22:02
Tilman hat folgendes geschrieben: |
Wie es mit den Indys steht, ob es da nicht doch irgendwie geht, weiß ich nicht. |
Wie gesagt... mit dem entgültigen Link funktioniert es mit Indy ohne Probleme.
jackie05 - Fr 05.09.08 22:08
@SAiBOT Vielen Dank für deine Hilfe.
Der entgültige Code steckt in IdHTTP1.Response.Location, hat wunderbar funktioniert, vielen Dank.
MfG
Tilman - Fr 05.09.08 22:13
Ah okay, sry ^^ hatte irgendwie überlesen dass du die Lösung gepostet hattest, hatte dich irgendwie missverstanden, SAiBOT.
jackie05 - Mo 29.09.08 22:26
Hallo nochmal,
seit paar tagen bekomme ich eine ganz andere Download URL zurückgeliefert, diese in IdHTTP1.Response.Location steckt, nun funktioniert das downloaden auch nicht mehr in Delphi.
Wenn ich den Link dann in Internet Explorer einfüge und anschließend auf Enter drücke, kann ich es downloaden, aber wieso kann ich es per Delphi nicht mehr downloaden?
Ich bedanke mich schonmal für die Hilfe.
MfG
dTrace - Do 09.10.08 17:27
Titel: quellcode
Hi, kannst du vielleicht mal den kompletten quellcode hier posten um mit indy eine youtube datei herunterzuladen.
Ich habe es versucht und bekomme ich die exception "forbidden"
danke....dtrace
SAiBOT - So 12.10.08 13:17
jackie05 hat folgendes geschrieben : |
Hallo nochmal,
seit paar tagen bekomme ich eine ganz andere Download URL zurückgeliefert, diese in IdHTTP1.Response.Location steckt, nun funktioniert das downloaden auch nicht mehr in Delphi.
Wenn ich den Link dann in Internet Explorer einfüge und anschließend auf Enter drücke, kann ich es downloaden, aber wieso kann ich es per Delphi nicht mehr downloaden?
Ich bedanke mich schonmal für die Hilfe.
MfG |
Es funktioniert immernoch
GENAU so wie ich oben beschrieben habe!
dTrace hat folgendes geschrieben : |
Hi, kannst du vielleicht mal den kompletten quellcode hier posten um mit indy eine youtube datei herunterzuladen.
Ich habe es versucht und bekomme ich die exception "forbidden"
danke....dtrace |
Das liegt wohl daran das YouTube den Standart UserAgent von Indy>Http gesperrt hat.
Dieser muss geändert werden!
jackie05 - Fr 20.02.09 01:06
Hallo nochmal,
seit einigen Tagen funktioniert das mit dem Downloaden nicht mehr, ich bekomme beim Downloaden der Datei folgende fehlermeldung:
HTTP/1.1 403 Forbidden
Hier ist mal der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| 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)'; Quelltext := HTTP.Get(URL); Download.Titel := Copy(Quelltext,Pos('<title>',Quelltext)+7,Pos('</title>', Quelltext)-Pos('<title>', Quelltext)-7); VideoID := Copy(Quelltext,Pos('video_id', Quelltext)+12,Pos('video_id', Quelltext)+0-Pos('video_id', Quelltext)+11); 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; |
Das ist jetzt nur der Code, um den Downloadlink zu generieren.
woran liegt denn der fehler?
Danke schonmal.
MfG
jackie05 - Fr 20.02.09 02:21
Das hat mir nicht weitergeholfen.
es liegt an diesem Code, wie ich gemerkt habe:
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
muss ich da vieleicht noch etwas hinzufügen oder so?
Danke schonmal.
MfG
jaenicke - Fr 20.02.09 02:36
jackie05 hat folgendes geschrieben : |
| es liegt an diesem Code, wie ich gemerkt habe: |
Wie kommst du darauf? :gruebel:
Wenn du das festgestellt hast, dann musst du ja nur den Code nehmen, mit dem es klappt. Und wenn du keinen funktionierenden hast, woher weißt du dann, dass es daran liegt? :shock:
Mit denen anderer realer Browser gehts jedenfalls auch nicht.
Ich würde jedenfalls eher sagen, dass schlicht die Adresse so nicht mehr geht, evtl. weil die mit get_video vermutlich jetzt geschützt weil ggf. kostenpflichtig ist.
Wie die richtige Adresse ist, sehe ich im Moment nicht.
jackie05 - Fr 20.02.09 04:45
Ich habe den Link jetzt von
Delphi-Quelltext
1: 2: 3: 4:
| try HTTP.Get('http://de.youtube.com/get_video?video_id='+VideoID+'&t='+T); except end; |
in
Delphi-Quelltext
1: 2: 3: 4:
| try HTTP.Get('http://www.youtube.com/get_video?video_id='+VideoID+'&t='+T); except end; |
geändert, und nun funktioniert das.
Danke trotzdem für die Hilfe.
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!