YoutubePlaylistLoader

  • Jo, ich hab hier mal als Übung für Regular Expressions einen Youtube Playlist Downloader für .NET 2.0 gecodet. Ist ne Konsolenanwendung, kann downloaden oder die Links in eine Liste schreiben, die eigentlich jeder Downloadmanager verarbeiten sollte. Playlist-ID angeben, paar Angaben machen, sich freuen. Ist in Englisch, ka warum :D
    Source dabei, WTFPL lizensiert :D
    YoutubePlaylistDownloader.rar (8,47 KB)
    Jo, wer Bugs findet darf sie melden oder gleich ausbessern, ich übernehme keine Garantie, auch nicht für Schäden, die durch das Betrachten des Sourcecodes entstehen.
    Und wer mir einen gescheiten Regex geben kann, mit dem ich aus der Youtube URL die Playlist-ID rausholen kann (mit oder ohne www. oder de. xy. vor youtube.com und mit oder ohne sinnlosen Anhängseln am Ende der URL), der wird von mir gepriesen bis in alle Ewigkeit oder so.
    Und das Downloaden von Material, welches euch nicht gehört, ist natürlich verboten.

  • Zitat von gandro

    Mangels Windows hab ich nur kurz den Quellcode überflogen.

    Ich weiss deine Arbeit zu schätzen, aber...

    Warum zum Teufel stocherst in den HTML-Seiten von YouTube mit regulären Ausdrücken rum, anstatt einfach die API von YouTube zu verwenden?

    Ich mein, da gibt es sogar .NET Beispiele dazu:
    Developer's Guide: .NET - YouTube APIs and Tools - Google Code


    Fuck stimmt ja, es gibt ja eine Youtube API :( Das macht natürlich alles einfacher... Aber eigentlich war das ganze ja eine Übung für Reguläre Ausdrücke.
    EEEEEEEEEDIT: Aber für die API braucht man einen API-Key. Und für nen API-Key muss man sich registrieren. Und zum registrieren muss man sich anmelden. Und zum registrieren muss man einer Lizenzbestimmung zustimmen. Und ich will mir die nicht durchlesen, weil ich schon erraten kann, was drinsteht: Download verboten.

    Einmal editiert, zuletzt von huttERic (24. Februar 2009 um 00:21)

  • Soweit hätt ich nicht mal gedacht. Aber hast völlig Recht.
    Hab mir den Quellcode jetzt noch etwas genauer angeschaut, sieht sauber aus, gefällt mir (bis auf die Ausgabe, die ganz langen mehrzeiligen Strings dürten imho auch im Code mehrere Zeilen lang sein).

    Ganz toll natürlich: Types_needed_for_more_than_one_method_wtf_what_a_stupid_name_this_region_has :D

    Weil es ja lobenswerterweise keine GUI hat, läufts sogar ohne frisch kompilieren mit Mono.

    Muss sagen, gefällt mir richtig gut.

    Einen Bug hats allerdings unter Non-Windowsen: Das am ApplicationPath angehängte \ wird unter Linux/Unix nicht als Verzeichnis-Trennzeichen gehandhabt. Ich krieg also keine Datei "links.txt" im Verzeichnis "/tmp/YoutubePlaylistDownloader", sondern eine Datei "YoutubePlaylistDownloader\links.txt" im Verzeichnis "/tmp".

  • Zitat von gandro

    Soweit hätt ich nicht mal gedacht. Aber hast völlig Recht.

    Jo, schade eigentlich.

    Zitat

    Hab mir den Quellcode jetzt noch etwas genauer angeschaut, sieht sauber aus, gefällt mir (bis auf die Ausgabe, die ganz langen mehrzeiligen Strings dürten imho auch im Code mehrere Zeilen lang sein).

    Ui, ich hätte jetzt gedacht, dass der als schlechter beurteilt wird. Stimmt aber mit den Texten, hab das je nach Lust und Laune gemacht, werde ich ausbessern.

    Zitat

    Ganz toll natürlich: Types_needed_for_more_than_one_method_wtf_what_a_stupid_name_this_region_has :D

    Ja, ich war grad lustig drauf :D

    Zitat

    Weil es ja lobenswerterweise keine GUI hat, läufts sogar ohne frisch kompilieren mit Mono.

    Muss sagen, gefällt mir richtig gut.

    Einen Bug hats allerdings unter Non-Windowsen: Das am ApplicationPath angehängte \ wird unter Linux/Unix nicht als Verzeichnis-Trennzeichen gehandhabt. Ich krieg also keine Datei "links.txt" im Verzeichnis "/tmp/YoutubePlaylistDownloader", sondern eine Datei "YoutubePlaylistDownloader\links.txt" im Verzeichnis "/tmp".

    Okay, das werde ich mal versuchen zu fixen. Mal schaun, ob System.IO.Path da was für hat. Die hat mono doch hoffentlich leicht modifiziert :D ansonsten muss ich halt das OS abfragen.

    Inline-EDIT:
    Jo, das hätte ich Microsoft doch gar nicht zugetraut, aber in System.IO.Path ist doch tatsächlich ein DirectorySeparatorChar drin, den Mono natürlich auf Unixoiden Betriebssystemen anders implementiert als Mono oder MS .NET auf Windows. Im nächsten Release wird das dann gefixt sein :) Der kommt aber wahrscheinlich erst, nachdem auch der andere Bug unten gefixt ist. //END-of-Inline-EDIT

    Und ich habe auch einen Bug gefunden: Bei manchen Playlists zeigt Youtube komischerweise alle Videos auf einer Seite an. Das merkt mein Tool natürlich nicht, geht von 10 Videos pro Seite aus und lädt daher die ersten 10 Videos doppelt und dreifach, abhängig von der Zahl der Videos. Das werde ich in Zukunft natürlich fixen.
    Aber schön, dass es dir gefällt =)

    Yet-Another-EDIT:

    Dann ist mir noch die Idee gekommen (da ich eigentlich nur noch wach bin, um den Rechner nach einem Download runterzufahren), dass man ja einen Befehl einstellen könnte, der am Ende ausgeführt wird...

    Einmal editiert, zuletzt von huttERic (24. Februar 2009 um 01:42)

  • Neue Version draußen:
    YoutubePlaylistDownloader.zip (9,20 KB)
    Changelog:
    - Sollte nun mit den unixoiden Dateisystemen klarkommen
    - Falls das Video verbotene Zeichen im Namen hat, werden diese beim Download gelöscht. Wie das mit unixoiden ist, weiß ich nicht. (Unter Windows sind das \/:*?"<>|)
    - Jetzt wird erkannt, wie viele Seiten die Playlist auch wirklich hat -> Es werden keine Videos mehr doppelt runtergeladen
    - Kleine Schönheitsoperationen am Sourcecode

    So, bitte fleißig weiter testen =) Vor allem würden mich die im Dateinamen nicht erlaubten Zeichen unter unixoiden Systemen interessieren.

  • Zitat von huttERic

    So, bitte fleißig weiter testen =) Vor allem würden mich die im Dateinamen nicht erlaubten Zeichen unter unixoiden Systemen interessieren.


    Hängt grundsätzlich Dateisystem ab, in der Regel sind das aber lediglich NUL (0x00) und / :D

    NUL, weil es bei C das String-Ende darstellt, / weil es der Verzeichnis-Trenner ist.

    Das mit der links.txt funktioniert jedenfalls.

  • Okay, ich werde mal sehen, inwieweit ich da noch was einbaue...
    Ist auch gerade eine neue Version kompiliert worden:
    PlaylistDownloader.zip (9,07 KB)
    Changelog:
    - Dateinamen werden jetzt mit führenden Nullen vergeben. z.B. 01 - xy.flv bis 81 - xyz.flv oder aber 0001 - zu.flv bis 9901 - asdf.flv

    EDIT:
    Yet another new version:
    PlaylistDownloader.zip (9,40 KB)
    Changelog:
    - NUL als illegales Zeichen im Dateinamen hinzugefügt
    - Unter Windows werden aus dem Dateinamen entfernt: \/:*?"<>| und NUL
    - Unter allen anderen Systemen werden entfernt: / und NUL

    Einmal editiert, zuletzt von huttERic (24. Februar 2009 um 11:22)

  • So, neue Version hochgeladen. Changelog:
    - Paar Codeverbesserungen
    - Jetzt kann man existierende Dateien überspringen (Falls es Netzwerkprobleme gegeben hat
    - Möglichkeit, die Tonspuren als mp3 direkt aus den Dateien zu extrahieren. (Passiert mit FLVExtract [GPL v2, daher Lizensierung des ganzen Programms unter GPL v2])

    So, ich hoffe, dass alles so funktioniert, wie es soll, auch unter Mono.
    YoutubePlaylistDownloader.zip (42,85 KB)

  • hö?

    Darf ich unter Tux meine Pornos nichma "Gina Wild - Ultra Gangbang NUL.avi" nennen oder wie :b2:

    Desktop: AMD FX-6200 @ 6 x 4,3 GHz | 32 GB DDR3 | Intel Arc A380 | SSD: 1 TB @ M.2 to PCIe Adapter + UEFI NVMe Driver Injection | HDD: 15 TB | Win 11 Pro | Dual Monitor 2 x 27"
    Notebook: Lenovo ThinkPad T420 | i5 2520M | 16 GB DDR3 | SSD: 250 GB | USB 3.0 | 300 MBit WWAN @ D1 | AC WLAN | BT 4.0 | 2 x 70++ | 1 x 27++ Slice | Win 11 Pro | FHD Display Mod
    Internetleitung: Telekom | FTTH | D: 500 MBit / U: 200 MBit | Telekom Glasfasermodem | AVM Fritz!Box 7490
    Räder: [Daily: Stevens E-Triton 2016] [Cyclocross: Stevens Prestige 2019] [Cargobike: Urban Arrow Cargo XL 2023]

  • Zitat von Alex

    hö?

    Darf ich unter Tux meine Pornos nichma "Gina Wild - Ultra Gangbang NUL.avi" nennen oder wie :b2:


    Nich "NUL", sondern NUL. Aka 0x00 aka. 00000000 aka. 0 aka. Chr(0) aka. Nullbyte.

    Das erste Zeichen auf der ASCII-Tabelle.

  • Jap, MP3 funktioniert einwandfrei.

    Naja, ich saug eh keine MP3s bei YouTube, aber falls ich das tun würde, dann wenn schon mit fmt=18. Denn Monosound auf 64KB/s ist nicht wirklich Musik (und ich lach da jeden aus, der glaubt, YouTube als Musikplattform zu verwenden).

    Aber wie gesagt, für mich musst du das nicht einbauen, werds so oder so nicht verwenden.

  • Tja, es kann aber auch nicht schaden, dass mal drinzubehalten. Wenn man mal schnell was im Voraus anhören möchte, was man sich später kaufen (oder so) will, dürfte das schon in Ordnung sein. (Dann wird man später von der Qualität doch nur noch positiv überrascht :D)
    Naja, nochmal eine neue Version, noch ein paar Codeänderungen, sowie Leerzeilen in der Ausgabe, weil ich finde, das kann man so besser lesen. Einheitliche Benutzereingaben und es wird kontrolliert, ob Videos doppelt in der Liste vorhanden sind, falls mal was nicht stimmen sollte mit der Anzeige der Playlist. Aber keine neuen Features.
    YoutubePlaylistDownloader.zip (44,17 KB)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!