$ pip install devine
笔记
如果 pip 向您发出有关路径不在 PATH 环境变量中的警告,请立即添加该路径,然后关闭所有打开的命令提示符/终端窗口,否则devine
将无法工作,因为找不到它。
瞧? — 您现在已经安装了devine
软件包!
现在可以使用命令行界面,尝试devine --help
。
以下是需要您手动安装的程序列表。
.mkv
文件。提示
如果可以的话,您应该从软件包存储库安装它们;包括 Windows 上的 winget/chocolatey。它们会自动将二进制文件的路径添加到您的PATH
环境变量中,并且将来更容易更新。
重要的
大多数依赖项都是可移植实用程序,因此不使用安装程序。如果您不从 winget/choco/pacman 等软件包存储库安装它们,请确保将它们放入当前工作目录、Devine 的安装目录或二进制文件的路径放入PATH
环境变量中。如果您不这样做,那么 Devine 将无法找到二进制文件。
首先,查看devine --help
获取完整的帮助文档,其中列出了所有可用命令,并为您提供了有关 Devine 可以做什么的更多信息。
这是我建议开始使用的清单,排名不分先后,
devine dl
中使用。 devine cfg tag NOGRP
for ...-NOGRP
。 这里有一些更高级的东西你可以看一下,
有关配置的文档可以在 CONFIG.md 文件中找到,它有很多方便的设置。
如果您开始厌倦在 CLI 调用中添加某些内容,那么我建议您看一下!
与 youtube-dl 等类似项目不同,Devine 目前不附带任何服务。您必须开发自己的服务,并且仅将 Devine 与您拥有合法权利的服务一起使用。
笔记
如果您为 Devine 提供的服务不使用 Widevine 或任何其他 DRM 系统,请随时提出 Pull 请求并将您的服务提供给其他人。 youtube-dl(或 yt-dlp)上的任何服务都可以添加到 Devine 存储库,因为它们都使用 Unlicense 许可证,因此直接读取和移植其代码是合法的。
警告
仅在您拥有完全合法权利的服务中创建或使用服务代码。
服务由一个带有__init__.py
文件的文件夹组成。该文件必须包含与文件夹同名的类。该类必须继承Service类并实现所有抽象方法。它最终必须实现一个名为cli
新方法,您可以在其中定义 CLI 参数。
/devine/services
中创建一个新文件夹。您选择的文件夹名称将是所谓的服务标签。此“标签”用在下载文件的最终输出文件名中,用于各种代码检查、密钥保管库数据库中的查找密钥等。__init__.py
文件并编写一个继承 Service 类的类。它的名称必须与文件夹完全相同。它区分大小写。cli
方法来定义 CLI 参数。该方法必须是静态的(即@staticmethod
)。例如,要实现接收某种标题 ID 的最低限度: @ 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
方法。核心 CLI 功能需要能够找到并调用该类。__init__()
方法)接受 CLI 参数: def __init__ ( self , ctx , title ):
self . title = title
super (). __init__ ( ctx ) # important
# ... the title is now available across all methods by calling self.title
笔记
Service
继承的所有标记为抽象 ( @abstractmethod
) 的方法都必须由您的类实现。__init__()
方法)时,您必须 super 调用它,例如,重写顶部的super().__init__()
。这不适用于任何抽象方法,因为它们未实现。get_session
方法,然后修改self.session
。不要从头开始手动创建self.session
。 提示
self.session
类实例变量,例如self.session.get(url)
。__init__.py
旁边创建了config.yaml
文件,则可以使用self.config
访问它。服务标签通常遵循以下规则:
[A-Z0-9i]{2,4}
。i
仅用于选定的服务。特别是 BBC iPlayer 和 iTunes。+
或Plus
,则最后一个字符应为P
。例如, Apple TV+
的ATVP
、 Discovery+
的DSCP
、 Disney+
的DSNP
以及Paramount+
的PMTP
。这些规则并不详尽,仅应用作指南。您不必严格遵守这些规则,但我建议这样做以保持一致性。
发送和接收压缩的服务文件夹非常麻烦。让我们探索在服务代码上进行协作的替代途径。
警告
请谨慎对待您信任的人和您经营的业务。与您协作处理服务代码的用户可能会使用您在下次调用时通过 devine 运行的恶意代码来更新它。
如果您正在与多个服务的团队进行协作,那么分叉项目是最好的方法。
git clone <your repo url here>
然后cd
进入它。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
。现在将您的服务或其他更改提交到您的分叉存储库。
一旦提交,所有其他团队成员都可以轻松地拉取更改以及推送新更改。
当新的更新出现时,您可以轻松地将您的分叉重新定位到该更新的提交。
git fetch upstream
git rebase upstream/master
但是,请确保在变基之前查看每个版本之间的更改,并在变基到新版本时解决任何重大更改和弃用。
如果您是git
新手,请查看 GitHub Desktop。
提示
这种方法的一个巨大好处是,您也可以通过自己的服务同步依赖项!只需使用poetry
适当地添加或修改依赖项并提交更改的poetry.lock
即可。但是,如果核心项目也有依赖项更改,您的poetry.lock
更改将发生冲突,您将需要学习如何解决冲突/重新定位。不过这是值得的!
对于那些希望执行类似分叉方法之类的操作,但可能不关心发生了什么更改或何时发生并且只想在整个团队中同步更改的人来说,这是一个很好的选择。
这也为您提供了托管或协作处理服务代码的方式。只要您能收到一个只更新其中的服务的目录,那么您就可以开始了。选项可能包括 FTP 服务器、共享 Google Drive、仅包含服务的非分支存储库等等。
services
目录,并将所有服务包含在其中。services
目录符号链接到/devine
文件夹。您最终应该得到包含服务的/devine/services
文件夹,而不是/devine/services/services
。您必须确保原始文件夹不断接收和下载/流式传输这些更改。您还必须确保服务代码支持您本地的 devine 版本。
笔记
如果您使用的云源在文件打开后就会下载文件,则不必担心,因为这些文件会自动下载。 Python 导入文件会触发下载开始。但是,这可能会导致启动延迟。
Devine 可以使用 Cookie 和/或凭证对服务进行身份验证。凭证存储在配置中,Cookie 存储在数据目录中,可以通过运行devine env info
找到该目录。
要将凭证添加到服务,请查看凭证配置,了解有关为每项服务设置一个或多个凭证的信息。您可以为每项服务添加一个或多个凭证,并使用-p/--profile
来选择要使用的凭证。
要将 Cookie 添加到服务中,请使用 Cookie 文件扩展名创建cookies.txt
文件并将其移至 Cookies 目录中。您必须将cookies.txt
文件重命名为服务标签的文件名(区分大小写),例如NF.txt
。您还可以将其放置在服务 Cookie 文件夹中,例如/Cookies/NF/default.txt
或/Cookies/NF/.txt
。
您可以将多个 Cookie 添加到/Cookies/NF/
文件夹中,并使用各自唯一的名称,然后使用-p/--profile
选择使用哪一个。例如, /Cookies/NF/sam.txt
,然后将其与--profile sam
一起使用。如果您创建的服务 Cookie 文件夹没有.txt
或default.txt
,但包含其他文件,则不会加载 Cookie,除非您使用-p/--profile
(如图所示)。这使您可以随意选择进行身份验证。
提示
-p/--profile
时在凭证名称和 Cookie 文件名上使用相同的名称。 警告
配置文件名称区分大小写,并且每个服务都是唯一的。它们没有任意字符或长度限制,但为了方便起见,我不建议使用任何特殊字符,因为您的终端可能会感到困惑。
Cookie 必须采用标准 Netscape Cookie 文件格式。
推荐的 Cookie 导出器扩展:
Rotem Dan
的“导出 Cookie”Ninh Pham
的“打开 Cookies.txt”,Rahul Shaw
的“获取 cookies.txt”理论上,任何其他导出为标准 Netscape 格式的扩展都应该可以工作。
警告Rahul Shaw 的 Get cookies.txt 扩展本质上是间谍软件。不要使用它。有一些安全版本(通常只是扩展的旧版本),但由于有安全的替代方案,我会完全避免使用它。来源:https://reddit.com/r/youtubedl/comments/10ar7o7
获取包含受 DRM 保护的内容的解密密钥的许可证需要 Widevine 规定。如果您将在无 DRM 服务上使用 devine,则不需要它们。请不要索要任何 Widevine 设备文件、密钥或规定,因为我们无法提供这些信息。
Devine 仅支持.WVD
文件(Widevine 设备文件)。但是,如果您将预配 RSA 私钥和设备客户端标识 Blob 作为 blob 文件(例如device_private_key
和device_client_id_blob
),则可以通过运行pywidevine create-device --help
将它们转换为.WVD
文件。
获得.WVD
文件后,将它们放入 WVDs 目录中,可以通过调用devine env info
找到该目录。然后,您可以在配置中通过devine cfg cdm.default wvd_name
设置默认使用的 WVD(仅通过文件名)。然后,您可以从此处设置每个特定服务要使用的 WVD。最好尽可能使用最低的安全级别规定。
另一种选择是使用 pywidevine Serve 兼容的 CDM API。当然,您需要认识为该服务提供服务的人,并且他们需要向您提供访问权限。查看remote_cdm 配置选项以获取设置信息。有关它的更多信息,请参阅 pywidevine 存储库。
Devine 及其社区页面应该像其他项目一样得到善待。请避免发送垃圾邮件或提出违反服务最终用户许可协议的问题。
本软件根据 GNU 通用公共许可证 3.0 版的条款获得许可。
您可以在根文件夹的 LICENSE 文件中找到许可证的副本。
© 拉菲尼克斯 2019-2024