$ pip install devine
Observação
Se pip lhe der um aviso sobre um caminho que não está em sua variável de ambiente PATH, adicione imediatamente esse caminho e feche todas as janelas de prompt de comando/terminal abertas, ou devine
não funcionará, pois não será encontrado.
Voilá? — Agora você tem o pacote devine
instalado!
Uma interface de linha de comando agora está disponível, tente devine --help
.
A seguir está uma lista de programas que precisam ser instalados manualmente por você.
.mkv
.Dica
Você deve instalá-los a partir de um repositório de pacotes, se puder; incluindo winget/chocolatey no Windows. Eles adicionarão automaticamente o caminho do binário à sua variável de ambiente PATH
e serão mais fáceis de atualizar no futuro.
Importante
A maioria dessas dependências são utilitários portáteis e, portanto, não usam instaladores. Se você não instalá-los a partir de um repositório de pacotes como winget/choco/pacman, certifique-se de colocá-los em seu diretório de trabalho atual, no diretório de instalação do Devine ou no caminho do binário em sua variável de ambiente PATH
. Se você não fizer isso, Devine não conseguirá encontrar os binários.
Primeiro, dê uma olhada em devine --help
para obter um documento de ajuda completo, listando todos os comandos disponíveis e fornecendo mais informações sobre o que pode ser feito com o Devine.
Aqui está uma lista de verificação do que recomendo para começar, sem nenhuma ordem específica,
devine dl
. devine cfg tag NOGRP
para ...-NOGRP
. E aqui estão algumas coisas mais avançadas que você pode dar uma olhada,
A documentação sobre a configuração está disponível no arquivo CONFIG.md, que contém muitas configurações úteis.
Se você começar a ficar cansado de colocar algo em sua chamada CLI, recomendo dar uma olhada!
Ao contrário de projetos semelhantes, como o youtube-dl, o Devine atualmente não vem com nenhum serviço. Você deve desenvolver seus próprios Serviços e usar o Devine somente com os Serviços para os quais você tem o direito legal de fazê-lo.
Observação
Se você fez um serviço para Devine que não usa Widevine ou qualquer outro sistema DRM, sinta-se à vontade para fazer uma solicitação pull e disponibilizar seu serviço para outras pessoas. Qualquer serviço no youtube-dl (ou yt-dlp) poderá ser adicionado ao repositório Devine, pois ambos usam a licença Unlicense, portanto, a leitura direta e a portabilidade de seu código seriam legais.
Aviso
Para criar ou usar o Código de Serviço apenas com Serviços, você tem pleno direito legal para fazê-lo.
Um serviço consiste em uma pasta com um arquivo __init__.py
. O arquivo deve conter uma classe com o mesmo nome da pasta. A classe deve herdar a classe Service e implementar todos os métodos abstraídos. Finalmente, ele deve implementar um novo método chamado cli
, onde você define os argumentos CLI.
/devine/services
. O nome da pasta que você escolher será conhecido como etiqueta de serviço. Esta "tag" é usada no nome do arquivo de saída final dos arquivos baixados, para várias verificações de código, chaves de pesquisa em bancos de dados de cofre de chaves e muito mais.__init__.py
e escreva uma classe herdando a classe Service. Deve ter o mesmo nome da pasta. Faz distinção entre maiúsculas e minúsculas.cli
. Este método deve ser estático (ou seja, @staticmethod
). Por exemplo, para implementar o mínimo necessário para receber uma espécie de ID de título: @ 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
, mesmo se não desejar ou precisar de nenhum argumento CLI. É necessário que a funcionalidade central da CLI seja capaz de localizar e chamar a 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
Observação
Service
marcados como abstratos ( @abstractmethod
) DEVEM ser implementados pela sua classe.__init__()
), você DEVE super chamá-lo, por exemplo, super().__init__()
no topo da substituição. Isso não se aplica a nenhum método abstrato, pois eles não são implementados.get_session
e modificar self.session
. Não faça self.session
manualmente do zero. Dica
self.session
, por exemplo, self.session.get(url)
.config.yaml
próximo ao seu __init__.py
, poderá acessá-lo com self.config
.As tags de serviço geralmente seguem estas regras:
[A-Z0-9i]{2,4}
.i
minúsculo é usado apenas para serviços selecionados. Especificamente BBC iPlayer e iTunes.+
ou Plus
, o último caractere deverá ser um P
. Por exemplo, ATVP
para Apple TV+
, DSCP
para Discovery+
, DSNP
para Disney+
e PMTP
para Paramount+
.Estas regras não são exaustivas e devem ser utilizadas apenas como um guia. Você não precisa seguir estritamente essas regras, mas recomendo fazê-lo para manter a consistência.
Enviar e receber pastas de serviço compactadas é bastante complicado. Vamos explorar rotas alternativas para colaborar no Código de Serviço.
Aviso
Tenha cuidado com quem você confia e com o que você administra. Os usuários com quem você colabora no código de serviço podem atualizá-lo com código malicioso que você executaria via devine na próxima chamada.
Se você estiver colaborando com uma equipe em vários serviços, a bifurcação do projeto é a melhor opção.
git clone <your repo url here>
e então cd
nele.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
. Agora envie seus serviços ou outras alterações para seu repositório bifurcado.
Uma vez comprometidos, todos os outros membros da equipe podem facilmente fazer alterações, bem como enviar novas alterações.
Quando uma nova atualização for lançada, você poderá facilmente rebasear seu fork para aquele compromisso de atualização.
git fetch upstream
git rebase upstream/master
No entanto, certifique-se de observar as alterações entre cada versão antes de fazer o rebase e resolver quaisquer alterações significativas e descontinuações ao fazer o rebase para uma nova versão.
Se você é novo no git
, dê uma olhada no GitHub Desktop.
Dica
Um grande benefício desse método é que você também pode sincronizar dependências por meio de seus próprios serviços! Basta usar poetry
para adicionar ou modificar dependências apropriadamente e confirmar o poetry.lock
alterado. No entanto, se o projeto principal também tiver alterações de dependência, suas alterações em poetry.lock
entrarão em conflito e você precisará aprender como resolver/rebasear conflitos. Mas vale a pena!
Esta é uma ótima opção para quem deseja fazer algo como o método de bifurcação, mas pode não se importar com quais mudanças aconteceram ou quando e apenas deseja que as alterações sejam sincronizadas em uma equipe.
Isso também abre maneiras de hospedar ou colaborar no código de serviço. Contanto que você possa receber um diretório que seja atualizado apenas com os serviços contidos nele, você estará pronto. As opções podem incluir um servidor FTP, Google Drive compartilhado, um repositório não bifurcado com apenas serviços e muito mais.
services
em algum lugar dele e tenha todos os seus serviços dentro dele.services
para a pasta /devine
. Você deve acabar com a pasta /devine/services
contendo serviços, não /devine/services/services
.Você deve garantir que a pasta original continue recebendo e baixando/transmitindo essas alterações. Você também deve certificar-se de que a versão do devine que você possui localmente é suportada pelo código de serviço.
Observação
Se você estiver usando uma fonte de nuvem que baixa o arquivo assim que ele é aberto, não precisa se preocupar, pois o download será feito automaticamente. A importação dos arquivos pelo Python aciona o início do download. No entanto, isso pode causar um atraso na inicialização.
A Devine pode autenticar-se nos Serviços usando Cookies e/ou Credenciais. As credenciais são armazenadas na configuração e os cookies são armazenados no diretório de dados que pode ser encontrado executando devine env info
.
Para adicionar uma credencial a um serviço, consulte Credentials Config para obter informações sobre como configurar uma ou mais credenciais por serviço. Você pode adicionar uma ou mais credenciais por serviço e usar -p/--profile
para escolher qual credencial usar.
Para adicionar um cookie a um serviço, use uma extensão de arquivo Cookie para criar um arquivo cookies.txt
e movê-lo para o diretório Cookies. Você deve renomear o arquivo cookies.txt
para o da tag de serviço (diferencia maiúsculas de minúsculas), por exemplo, NF.txt
. Você também pode colocá-lo em uma pasta de cookies de serviço, por exemplo, /Cookies/NF/default.txt
ou /Cookies/NF/.txt
.
Você pode adicionar vários cookies à pasta /Cookies/NF/
com seu próprio nome exclusivo e então usar -p/--profile
para escolher qual deles usar. Por exemplo, /Cookies/NF/sam.txt
e use-o com --profile sam
. Se você criar uma pasta de cookies de serviço sem .txt
ou default.txt
, mas com outro arquivo, nenhum cookie será carregado, a menos que você use -p/--profile
como mostrado. Isso permite que você opte pela autenticação quando desejar.
Dica
-p/--profile
. Aviso
Os nomes dos perfis diferenciam maiúsculas de minúsculas e são exclusivos por serviço. Eles não têm caracteres arbitrários ou limite de comprimento, mas por conveniência, não recomendo o uso de caracteres especiais, pois seu terminal pode ficar confuso.
Os cookies devem estar no formato de arquivo de cookies padrão do Netscape.
Extensões de exportador de cookies recomendadas:
Rotem Dan
Ninh Pham
,Rahul Shaw
Qualquer outra extensão que exporte para o formato padrão do Netscape deveria teoricamente funcionar.
Aviso A extensão Get cookies.txt de Rahul Shaw é essencialmente spyware. Não use isso. Existem algumas versões seguras circulando (geralmente apenas versões mais antigas da extensão), mas como existem alternativas seguras, eu as evitaria completamente. Fonte: https://reddit.com/r/youtubedl/comments/10ar7o7
Uma Provisão Widevine é necessária para adquirir licenças contendo chaves de descriptografia para conteúdo protegido por DRM. Eles não são necessários se você usar o devine em serviços sem DRM. Não solicite nenhum arquivo, chave ou provisão do dispositivo Widevine, pois eles não podem ser fornecidos.
Devine oferece suporte apenas a arquivos .WVD
(arquivos de dispositivo Widevine). No entanto, se você tiver o Blob Provision RSA Private Key e Device Client Identification como arquivos blob (por exemplo, device_private_key
e device_client_id_blob
), poderá convertê-los em um arquivo .WVD
executando pywidevine create-device --help
.
Depois de ter os arquivos .WVD
, coloque-os no diretório WVDs, que pode ser encontrado chamando devine env info
. Você pode então definir em sua configuração qual WVD (somente por nome de arquivo) usar por padrão com devine cfg cdm.default wvd_name
. A partir daqui você pode definir qual WVD usar para cada serviço específico. É melhor usar o nível de segurança mais baixo sempre que possível.
Uma alternativa seria usar uma API CDM compatível com pywidevine Serve. Claro, você precisaria conhecer alguém que esteja servindo um, e essa pessoa precisaria lhe dar acesso. Dê uma olhada na opção de configuração remote_cdm para obter informações de configuração. Para mais informações sobre isso, consulte o repositório pywidevine.
Devine e suas páginas da comunidade devem ser tratadas com a mesma gentileza que outros projetos. Evite enviar spam ou fazer perguntas que violem o Contrato de Licença do Usuário Final do Serviço.
Este software está licenciado sob os termos da Licença Pública Geral GNU, Versão 3.0.
Você pode encontrar uma cópia da licença no arquivo LICENSE na pasta raiz.
© rlaphoenix 2019-2024