$ pip install devine
Note
Si pip vous avertit qu'un chemin ne figure pas dans votre variable d'environnement PATH, ajoutez rapidement ce chemin, puis fermez toutes les fenêtres d'invite de commande/terminal ouvertes, sinon devine
ne fonctionnera pas car il ne sera pas trouvé.
Voilà ? — Vous avez maintenant le package devine
installé !
Une interface de ligne de commande est maintenant disponible, essayez devine --help
.
Ce qui suit est une liste de programmes que vous devez installer manuellement.
.mkv
.Conseil
Vous devez les installer à partir d'un référentiel de packages si vous le pouvez ; y compris Winget/Chocolatey sous Windows. Ils ajouteront automatiquement le chemin du binaire à votre variable d'environnement PATH
et seront plus faciles à mettre à jour à l'avenir.
Important
La plupart de ces dépendances sont des utilitaires portables et n'utilisent donc pas d'installateurs. Si vous ne les installez pas à partir d'un référentiel de packages comme winget/choco/pacman, assurez-vous de les placer dans votre répertoire de travail actuel, dans le répertoire d'installation de Devine ou dans le chemin du binaire dans votre variable d'environnement PATH
. Si vous ne le faites pas, Devine ne pourra pas trouver les binaires.
Tout d’abord, jetez un œil à devine --help
pour un document d’aide complet, répertoriant toutes les commandes disponibles et vous donnant plus d’informations sur ce qui peut être fait avec Devine.
Voici une liste de contrôle sur ce que je recommande de commencer, sans ordre particulier,
devine dl
. devine cfg tag NOGRP
pour ...-NOGRP
. Et voici quelques éléments plus avancés que vous pourriez consulter,
La documentation sur la configuration est disponible dans le fichier CONFIG.md, elle contient de nombreux paramètres pratiques.
Si vous commencez à en avoir marre de mettre quelque chose dans votre appel CLI, alors je vous recommande d'y jeter un œil !
Contrairement à des projets similaires tels que youtube-dl, Devine ne propose actuellement aucun service. Vous devez développer vos propres services et utiliser Devine uniquement avec les services pour lesquels vous avez le droit légal de le faire.
Note
Si vous avez créé un service pour Devine qui n'utilise pas Widevine ou tout autre système DRM, n'hésitez pas à faire une Pull Request et à rendre votre service accessible à d'autres. Tout service sur youtube-dl (ou yt-dlp) pourrait être ajouté au référentiel Devine car ils utilisent tous deux la licence Unlicense, donc la lecture directe et le portage de leur code seraient légaux.
Avertissement
Créez ou utilisez uniquement un code de service avec des services pour lesquels vous avez pleinement le droit légal de le faire.
Un service est constitué d'un dossier avec un fichier __init__.py
. Le fichier doit contenir une classe du même nom que le dossier. La classe doit hériter de la classe Service et implémenter toutes les méthodes abstraites. Il doit enfin implémenter une nouvelle méthode nommée cli
où vous définissez les arguments CLI.
/devine/services
. Le nom du dossier que vous choisissez sera ce qu'on appelle le numéro de service. Cette « balise » est utilisée dans le nom de fichier de sortie final des fichiers téléchargés, pour diverses vérifications de code, la recherche de clés dans les bases de données de coffre-fort de clés, etc.__init__.py
et écrivez une classe héritant de la classe Service. Il doit porter exactement le même nom que le dossier. Il est sensible à la casse.cli
. Cette méthode doit être statique (c'est-à-dire @staticmethod
). Par exemple, pour implémenter le strict minimum pour recevoir une sorte d'ID de titre : @ 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
, même si vous ne souhaitez pas ou n'avez pas besoin d'arguments CLI. Il est nécessaire que la fonctionnalité principale de la CLI puisse rechercher et appeler la classe.__init__()
) : def __init__ ( self , ctx , title ):
self . title = title
super (). __init__ ( ctx ) # important
# ... the title is now available across all methods by calling self.title
Note
Service
marquées comme abstraites ( @abstractmethod
) DOIVENT être implémentées par votre classe.__init__()
), vous DEVEZ l'appeler super, par exemple, super().__init__()
en haut du remplacement. Cela ne s'applique à aucune méthode abstraite, car elles ne sont pas implémentées.get_session
, puis modifier self.session
. Ne créez pas manuellement self.session
à partir de zéro. Conseil
self.session
, par exemple self.session.get(url)
.config.yaml
à côté de votre __init__.py
, vous pouvez y accéder avec self.config
.Les balises de service suivent généralement ces règles :
[A-Z0-9i]{2,4}
.i
minuscule n’est utilisé que pour certains services. Plus précisément BBC iPlayer et iTunes.+
ou Plus
, le dernier caractère doit être un P
. Par exemple, ATVP
pour Apple TV+
, DSCP
pour Discovery+
, DSNP
pour Disney+
et PMTP
pour Paramount+
.Ces règles ne sont pas exhaustives et ne doivent être utilisées qu’à titre indicatif. Vous n’êtes pas strictement obligé de suivre ces règles, mais je vous recommande de le faire par souci de cohérence.
L'envoi et la réception de dossiers de service compressés sont assez fastidieux. Explorons d'autres voies de collaboration sur Service Code.
Avertissement
Veuillez faire attention à qui vous faites confiance et à ce que vous dirigez. Les utilisateurs avec lesquels vous collaborez sur le code du service pourraient le mettre à jour avec un code malveillant que vous exécuteriez via Devine lors du prochain appel.
Si vous collaborez avec une équipe sur plusieurs services, la bifurcation du projet est la meilleure voie à suivre.
git clone <your repo url here>
puis cd
y.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
. Maintenant, validez vos services ou autres modifications dans votre référentiel forké.
Une fois engagés, tous les autres membres de votre équipe peuvent facilement apporter des modifications ainsi qu’en proposer de nouvelles.
Lorsqu'une nouvelle mise à jour sort, vous pouvez facilement rebaser votre fork sur cet engagement à mettre à jour.
git fetch upstream
git rebase upstream/master
Cependant, assurez-vous d'examiner les modifications entre chaque version avant de rebaser et de résoudre les modifications importantes et les dépréciations lors du rebasage vers une nouvelle version.
Si vous êtes nouveau sur git
, jetez un œil à GitHub Desktop.
Conseil
Un énorme avantage de cette méthode est que vous pouvez également synchroniser les dépendances par vos propres services ! Utilisez simplement poetry
pour ajouter ou modifier les dépendances de manière appropriée et validez le poetry.lock
modifié. Cependant, si le projet principal comporte également des modifications de dépendance, vos modifications poetry.lock
entreront en conflit et vous devrez apprendre à résoudre/rebaser les conflits. Mais ça vaut le coup !
Il s'agit d'une excellente option pour ceux qui souhaitent faire quelque chose comme la méthode de fork, mais qui ne se soucient pas des changements qui se sont produits ou du moment où ils souhaitent simplement que les changements soient synchronisés au sein d'une équipe.
Cela ouvre également les moyens par lesquels vous pouvez héberger ou collaborer sur le code du service. Tant que vous pouvez recevoir un répertoire mis à jour avec uniquement les services qu'il contient, alors vous êtes prêt à partir. Les options peuvent inclure un serveur FTP, un Google Drive partagé, un référentiel non-fork avec uniquement des services, et bien plus encore.
services
quelque part et placez-y tous vos services.services
et le dossier /devine
. Vous devriez vous retrouver avec le dossier /devine/services
contenant des services, pas /devine/services/services
.Vous devez vous assurer que le dossier d'origine continue de recevoir et de télécharger/diffuser ces modifications. Vous devez également vous assurer que la version de Devine dont vous disposez localement est prise en charge par le code du service.
Note
Si vous utilisez une source cloud qui télécharge le fichier une fois ouvert, vous n'avez pas à vous inquiéter car ceux-ci seront automatiquement téléchargés. L'importation des fichiers par Python déclenche le démarrage du téléchargement. Cependant, cela peut entraîner un retard au démarrage.
Devine peut s'authentifier auprès des Services à l'aide de cookies et/ou d'informations d'identification. Les informations d'identification sont stockées dans la configuration et les cookies sont stockés dans le répertoire de données qui peut être trouvé en exécutant devine env info
.
Pour ajouter un identifiant à un service, consultez la configuration des identifiants pour obtenir des informations sur la configuration d'un ou plusieurs identifiants par service. Vous pouvez ajouter un ou plusieurs identifiants par service et utiliser -p/--profile
pour choisir les identifiants à utiliser.
Pour ajouter un cookie à un service, utilisez une extension de fichier Cookie pour créer un fichier cookies.txt
et déplacez-le dans le répertoire Cookies. Vous devez renommer le fichier cookies.txt
en celui de la balise de service (sensible à la casse), par exemple NF.txt
. Vous pouvez également le placer dans un dossier Service Cookie, par exemple /Cookies/NF/default.txt
ou /Cookies/NF/.txt
.
Vous pouvez ajouter plusieurs cookies au dossier /Cookies/NF/
avec leur propre nom unique, puis utiliser -p/--profile
pour choisir celui à utiliser. Par exemple, /Cookies/NF/sam.txt
, puis utilisez-le avec --profile sam
. Si vous créez un dossier de cookies de service sans .txt
ou default.txt
, mais avec un autre fichier, aucun cookie ne sera chargé à moins que vous n'utilisiez -p/--profile
comme indiqué. Cela vous permet d'accepter l'authentification à votre guise.
Conseil
-p/--profile
. Avertissement
Les noms de profil sont sensibles à la casse et uniques par service. Ils n'ont pas de limite de caractère ou de longueur arbitraire, mais pour des raisons de commodité, je ne recommande pas d'utiliser de caractères spéciaux car votre terminal pourrait être confus.
Les cookies doivent être au format de fichier de cookies standard de Netscape.
Extensions d'exportateur de cookies recommandées :
Rotem Dan
Ninh Pham
,Rahul Shaw
Toute autre extension exportant au format standard Netscape devrait théoriquement fonctionner.
Avertissement L'extension Get cookies.txt de Rahul Shaw est essentiellement un logiciel espion. Ne l'utilisez pas. Il existe des versions sûres (généralement uniquement des versions plus anciennes de l'extension), mais comme il existe des alternatives sûres, je l'éviterais complètement. Source : https://reddit.com/r/youtubedl/comments/10ar7o7
Une provision Widevine est nécessaire pour acquérir des licences contenant des clés de déchiffrement pour le contenu protégé par DRM. Ils ne sont pas nécessaires si vous utilisez Devine sur des services sans DRM. Veuillez ne pas demander de fichiers, de clés ou de provisions de périphérique Widevine, car ils ne peuvent pas être fournis.
Devine ne prend en charge que les fichiers .WVD
(Widevine Device Files). Cependant, si vous disposez de la clé privée RSA de provisionnement et du blob d'identification du client de périphérique sous forme de fichiers blob (par exemple, device_private_key
et device_client_id_blob
), vous pouvez les convertir en fichier .WVD
en exécutant pywidevine create-device --help
.
Une fois que vous avez les fichiers .WVD
, placez-les dans le répertoire WVDs qui peut être trouvé en appelant devine env info
. Vous pouvez ensuite définir dans votre configuration quel WVD (par nom de fichier uniquement) utiliser par défaut avec devine cfg cdm.default wvd_name
. À partir de là, vous pouvez ensuite définir le WVD à utiliser pour chaque service spécifique. Il est préférable d'utiliser le niveau de sécurité le plus bas lorsque cela est possible.
Une alternative consisterait à utiliser une API CDM compatible avec pywidevine Serve. Bien sûr, vous devrez connaître quelqu'un qui en sert un, et il devra vous donner accès. Jetez un œil à l’option de configuration remote_cdm pour les informations de configuration. Pour plus d'informations à ce sujet, consultez le référentiel pywidevine.
Devine et ses pages communautaires doivent être traitées avec la même gentillesse que les autres projets. Veuillez vous abstenir de spam ou de poser des questions qui enfreignent le contrat de licence d'utilisateur final d'un service.
Ce logiciel est sous licence selon les termes de la licence publique générale GNU, version 3.0.
Vous pouvez trouver une copie de la licence dans le fichier LICENSE dans le dossier racine.
© rlaphoenix 2019-2024