$ pip install devine
Notiz
Wenn pip Sie warnt, dass ein Pfad nicht in Ihrer PATH-Umgebungsvariablen enthalten ist, fügen Sie diesen Pfad sofort hinzu und schließen Sie alle geöffneten Eingabeaufforderungs-/Terminalfenster. Andernfalls funktioniert devine
nicht, da er nicht gefunden wird.
Voilà? — Sie haben jetzt das devine
-Paket installiert!
Eine Befehlszeilenschnittstelle ist jetzt verfügbar. Versuchen Sie es mit devine --help
.
Im Folgenden finden Sie eine Liste der Programme, die von Ihnen manuell installiert werden müssen.
.mkv
Datei.Tipp
Sie sollten diese nach Möglichkeit aus einem Paket-Repository installieren. einschließlich Winget/Chocolatey unter Windows. Sie fügen den Pfad der Binärdatei automatisch zu Ihrer PATH
Umgebungsvariablen hinzu und lassen sich in Zukunft einfacher aktualisieren.
Wichtig
Die meisten dieser Abhängigkeiten sind portable Dienstprogramme und verwenden daher keine Installationsprogramme. Wenn Sie sie nicht aus einem Paket-Repository wie Winget/Choco/Pacman installieren, stellen Sie sicher, dass Sie sie in Ihrem aktuellen Arbeitsverzeichnis, im Installationsverzeichnis von Devine oder im Pfad der Binärdatei in Ihrer PATH
Umgebungsvariablen ablegen. Wenn Sie dies nicht tun, kann Devine die Binärdateien nicht finden.
Werfen Sie zunächst einen Blick auf devine --help
. Dort finden Sie ein vollständiges Hilfedokument, das alle verfügbaren Befehle auflistet und Ihnen weitere Informationen darüber gibt, was mit Devine gemacht werden kann.
Hier ist eine Checkliste dazu, was ich für den Anfang empfehle, in keiner bestimmten Reihenfolge:
devine dl
verwendet. devine cfg tag NOGRP
für ...-NOGRP
. Und hier sind einige fortgeschrittenere Dinge, die Sie sich ansehen könnten:
Die Dokumentation zur Konfiguration ist in der Datei CONFIG.md verfügbar und enthält viele praktische Einstellungen.
Wenn Sie es satt haben, etwas in Ihren CLI-Aufruf einzubauen, dann empfehle ich Ihnen, einen Blick darauf zu werfen!
Im Gegensatz zu ähnlichen Projekten wie youtube-dl bietet Devine derzeit keine Dienste. Sie müssen Ihre eigenen Dienste entwickeln und Devine nur mit Diensten nutzen, zu denen Sie gesetzlich berechtigt sind.
Notiz
Wenn Sie einen Dienst für Devine erstellt haben, der weder Widevine noch andere DRM-Systeme verwendet, können Sie gerne eine Pull-Anfrage stellen und Ihren Dienst anderen zur Verfügung stellen. Jeder Dienst auf youtube-dl (oder yt-dlp) könnte zum Devine-Repository hinzugefügt werden, da beide die Unlicense-Lizenz verwenden und daher das direkte Lesen und Portieren ihres Codes legal wäre.
Warnung
Erstellen oder verwenden Sie einen Servicecode nur mit Services, zu denen Sie das volle Recht haben.
Ein Dienst besteht aus einem Ordner mit einer __init__.py
Datei. Die Datei muss eine Klasse mit demselben Namen wie der Ordner enthalten. Die Klasse muss die Service-Klasse erben und alle abstrahierten Methoden implementieren. Schließlich muss eine neue Methode namens cli
implementiert werden, in der Sie CLI-Argumente definieren.
/devine/services
. Der von Ihnen gewählte Ordnername wird als Service-Tag bezeichnet. Dieses „Tag“ wird im endgültigen Ausgabedateinamen heruntergeladener Dateien für verschiedene Codeprüfungen, Suchschlüssel in Schlüsseltresordatenbanken und mehr verwendet.__init__.py
-Datei und schreiben Sie eine Klasse, die die Service-Klasse erbt. Der Name muss genau dem des Ordners entsprechen. Dabei wird die Groß-/Kleinschreibung beachtet.cli
-Methode implementieren. Diese Methode muss statisch sein (dh @staticmethod
). Um beispielsweise das Nötigste zu implementieren, um eine Art Titel-ID zu erhalten: @ staticmethod
@ click . command ( name = "YT" , short_help = "https://youtube.com" , help = __doc__ )
@ click . argument ( "title" , type = str )
@ click . pass_context
def cli ( ctx , ** kwargs ):
return YT ( ctx , ** kwargs )
cli
-Methode implementieren, auch wenn Sie keine CLI-Argumente wünschen oder benötigen. Es ist erforderlich, dass die Kern-CLI-Funktionalität die Klasse finden und aufrufen kann.__init__()
) überschreiben: def __init__ ( self , ctx , title ):
self . title = title
super (). __init__ ( ctx ) # important
# ... the title is now available across all methods by calling self.title
Notiz
Service
geerbt wurden und als abstrakt markiert sind ( @abstractmethod
), MÜSSEN von Ihrer Klasse implementiert werden.__init__()
), MÜSSEN Sie sie super aufrufen, z. B. super().__init__()
am Anfang der Überschreibung. Dies gilt nicht für abstrakte Methoden, da diese nicht implementiert sind.get_session
überschreiben und dann self.session
ändern. Erstellen Sie self.session
nicht manuell von Grund auf. Tipp
self.session
, z. B. self.session.get(url)
.config.yaml
Datei neben Ihrer __init__.py
erstellen, können Sie mit self.config
darauf zugreifen.Service-Tags folgen im Allgemeinen diesen Regeln:
[A-Z0-9i]{2,4}
bestehen.i
wird nur für ausgewählte Dienste verwendet. Insbesondere BBC iPlayer und iTunes.+
oder Plus
enthält, sollte das letzte Zeichen ein P
sein. Zum Beispiel ATVP
für Apple TV+
, DSCP
für Discovery+
, DSNP
für Disney+
und PMTP
für Paramount+
.Diese Regeln erheben keinen Anspruch auf Vollständigkeit und sollten nur als Leitfaden dienen. Sie müssen diese Regeln nicht unbedingt befolgen, ich empfehle jedoch, dies aus Gründen der Konsistenz zu tun.
Das Senden und Empfangen gezippter Service-Ordner ist recht umständlich. Lassen Sie uns alternative Wege zur Zusammenarbeit am Servicecode erkunden.
Warnung
Seien Sie bitte vorsichtig, wem Sie vertrauen und was Sie betreiben. Die Benutzer, mit denen Sie am Servicecode zusammenarbeiten, könnten ihn mit Schadcode aktualisieren, den Sie beim nächsten Aufruf über Devine ausführen würden.
Wenn Sie mit einem Team an mehreren Diensten zusammenarbeiten, ist die Abspaltung des Projekts die beste Lösung.
git clone <your repo url here>
und dann cd
hinein.git remote add upstream https://github.com/devine-dl/devine
git remote set-url --push upstream DISABLE
git fetch upstream
git pull upstream master
git reset --hard v1.0.0
. Übertragen Sie nun Ihre Dienste oder andere Änderungen an Ihr gespaltenes Repository.
Nach der Festschreibung können alle Ihre anderen Teammitglieder problemlos Änderungen übernehmen und neue Änderungen vorantreiben.
Wenn ein neues Update herauskommt, können Sie Ihren Fork ganz einfach auf diesen zu aktualisierenden Commit umbasieren.
git fetch upstream
git rebase upstream/master
Bitte stellen Sie jedoch sicher, dass Sie sich die Änderungen zwischen den einzelnen Versionen ansehen, bevor Sie eine Neubasierung durchführen, und alle wichtigen Änderungen und veralteten Versionen beheben, wenn Sie auf eine neue Version umbasieren.
Wenn Sie git
-Neuling sind, werfen Sie einen Blick auf GitHub Desktop.
Tipp
Ein großer Vorteil dieser Methode besteht darin, dass Sie auch Abhängigkeiten Ihrer eigenen Dienste synchronisieren können! Verwenden Sie einfach poetry
um Abhängigkeiten entsprechend hinzuzufügen oder zu ändern, und übernehmen Sie die geänderte poetry.lock
. Wenn das Kernprojekt jedoch auch Abhängigkeitsänderungen aufweist, treten bei Ihren poetry.lock
-Änderungen Konflikte auf, und Sie müssen lernen, wie Sie Konflikte lösen/umbasieren. Es lohnt sich aber!
Dies ist eine großartige Option für diejenigen, die so etwas wie die Forking-Methode anwenden möchten, sich aber möglicherweise nicht darum kümmern, welche Änderungen wann stattgefunden haben, und die Änderungen lediglich im gesamten Team synchronisieren möchten.
Dies eröffnet Ihnen auch die Möglichkeit, Servicecode zu hosten oder daran mitzuarbeiten. Solange Sie ein Verzeichnis erhalten, das nur die darin enthaltenen Dienste aktualisiert, können Sie loslegen. Zu den Optionen könnten ein FTP-Server, Shared Google Drive, ein Non-Fork-Repository mit nur Diensten und mehr gehören.
services
und speichern Sie alle Ihre Dienste darin.services
mit dem Ordner /devine
. Sie sollten am Ende den Ordner /devine/services
erhalten, der Dienste enthält, nicht /devine/services/services
.Sie müssen sicherstellen, dass der ursprüngliche Ordner diese Änderungen weiterhin empfängt und herunterlädt/streamt. Sie müssen außerdem sicherstellen, dass die Version von Devine, die Sie lokal haben, vom Servicecode unterstützt wird.
Notiz
Wenn Sie eine Cloud-Quelle verwenden, die die Datei nach dem Öffnen herunterlädt, müssen Sie sich keine Sorgen machen, da diese automatisch heruntergeladen werden. Das Importieren der Dateien durch Python löst den Beginn des Downloads aus. Es kann jedoch zu einer Verzögerung beim Start kommen.
Devine kann sich mithilfe von Cookies und/oder Anmeldeinformationen bei Diensten authentifizieren. Anmeldeinformationen werden in der Konfiguration gespeichert und Cookies werden im Datenverzeichnis gespeichert, das durch Ausführen devine env info
gefunden werden kann.
Um einem Dienst Anmeldeinformationen hinzuzufügen, sehen Sie sich die Konfiguration der Anmeldeinformationen an, um Informationen zum Einrichten einer oder mehrerer Anmeldeinformationen pro Dienst zu erhalten. Sie können pro Dienst ein oder mehrere Anmeldeinformationen hinzufügen und mit -p/--profile
auswählen, welche Anmeldeinformationen verwendet werden sollen.
Um einem Dienst ein Cookie hinzuzufügen, verwenden Sie eine Cookie-Dateierweiterung, um eine cookies.txt
Datei zu erstellen und diese in das Cookies-Verzeichnis zu verschieben. Sie müssen die Datei cookies.txt
in die des Service-Tags umbenennen (Groß- und Kleinschreibung beachten), z. B. NF.txt
. Sie können es auch in einem Service-Cookie-Ordner ablegen, z. B. /Cookies/NF/default.txt
oder /Cookies/NF/.txt
.
Sie können mehrere Cookies mit ihrem eigenen eindeutigen Namen zum Ordner /Cookies/NF/
hinzufügen und dann mit -p/--profile
auswählen, welches verwendet werden soll. Zum Beispiel /Cookies/NF/sam.txt
und dann mit --profile sam
verwenden. Wenn Sie einen Service-Cookie-Ordner ohne .txt
oder default.txt
, aber mit einer anderen Datei erstellen, werden keine Cookies geladen, es sei denn, Sie verwenden -p/--profile
wie gezeigt. Auf diese Weise können Sie die Authentifizierung nach Belieben aktivieren.
Tipp
-p/--profile
denselben Namen für den Anmeldeinformationsnamen und den Cookie-Dateinamen verwenden. Warnung
Bei Profilnamen wird die Groß-/Kleinschreibung beachtet und sie sind pro Dienst eindeutig. Es gibt keine willkürliche Zeichen- oder Längenbeschränkung, aber der Einfachheit halber empfehle ich, keine Sonderzeichen zu verwenden, da Ihr Terminal dadurch verwirrt werden könnte.
Cookies müssen im standardmäßigen Netscape-Cookie-Dateiformat vorliegen.
Empfohlene Cookie-Exporter-Erweiterungen:
Rotem Dan
Ninh Pham
,Rahul Shaw
Jede andere Erweiterung, die in das Standard-Netscape-Format exportiert, sollte theoretisch funktionieren.
Warnung: Bei der Erweiterung „Get Cookies.txt“ von Rahul Shaw handelt es sich im Wesentlichen um Spyware. Benutzen Sie es nicht. Es gibt einige sichere Versionen (normalerweise nur ältere Versionen der Erweiterung), aber da es sichere Alternativen gibt, würde ich sie einfach ganz vermeiden. Quelle: https://reddit.com/r/youtubedl/comments/10ar7o7
Für den Erwerb von Lizenzen, die Entschlüsselungsschlüssel für DRM-geschützte Inhalte enthalten, ist eine Widevine-Bestimmung erforderlich. Sie werden nicht benötigt, wenn Sie Devine für DRM-freie Dienste verwenden. Bitte fragen Sie nicht nach Widevine-Gerätedateien, Schlüsseln oder Bereitstellungen, da diese nicht bereitgestellt werden können.
Devine unterstützt nur .WVD
Dateien (Widevine Device Files). Wenn Sie jedoch über den Provision RSA Private Key und den Device Client Identification Blob als Blobdateien verfügen (z. B. device_private_key
und device_client_id_blob
), können Sie diese in eine .WVD
Datei konvertieren, indem Sie pywidevine create-device --help
ausführen.
Sobald Sie über .WVD
Dateien verfügen, legen Sie diese im WVDs-Verzeichnis ab, das Sie durch Aufrufen von devine env info
finden. Sie können dann in Ihrer Konfiguration festlegen, welches WVD (nur nach Dateiname) standardmäßig mit devine cfg cdm.default wvd_name
verwendet werden soll. Von hier aus können Sie dann festlegen, welches WVD für jeden spezifischen Dienst verwendet werden soll. Am besten verwenden Sie nach Möglichkeit die Bereitstellung mit der niedrigsten Sicherheitsstufe.
Eine Alternative wäre die Verwendung einer mit Pywidevine Serve kompatiblen CDM-API. Natürlich müssten Sie jemanden kennen, der einen bedient, und dieser müsste Ihnen Zugang gewähren. Schauen Sie sich die Konfigurationsoption remote_cdm an, um Informationen zur Einrichtung zu erhalten. Weitere Informationen dazu finden Sie im Pywidevine-Repository.
Devine und seine Community-Seiten sollten mit der gleichen Freundlichkeit behandelt werden wie andere Projekte. Bitte sehen Sie davon ab, Spam zu versenden oder Fragen zu stellen, die gegen die Endbenutzer-Lizenzvereinbarung eines Dienstes verstoßen.
Diese Software ist unter den Bedingungen der GNU General Public License, Version 3.0, lizenziert.
Eine Kopie der Lizenz finden Sie in der LICENSE-Datei im Stammordner.
© rlaphoenix 2019-2024