Bom dia, boa tarde, boa noite!
Este é o primeiro post da série sobre o projeto Video Creator, onde mostrarei a arquitetura que utilizei no projeto, organização das pastas e dos códigos.
Se você entrou direto nesse post, te aconselho a começar por aqui, para entender exatamente do que se trata essa série.
Sobre essa parte
Sempre que vou começar um novo projeto, gosto de começar a pensar como vou estruturar as pastas e os códigos.
Para esse projeto eu usei a seguinte estrutura:
videocreator # Na raíz fica o “orquestrador” dos robôs
├── content # aqui fica todo o conteúdo para o video
│ ├── default # arquivos default
│ ├── images # imagens para o video
│ └── music # musicas para o video
├── credentials # aqui ficam todas as credenciais dos serviços
└── robots # aqui ficam os “robôs”
Organização do código
Na hora de codificar cada uma das features, tentei agrupá-las por “assunto”, afim de que cada robô pudesse ser executado por completo e de forma independente.
São eles:
rcontent.py
O rcontent é responsável por todo o conteúdo textual do vídeo. É ele quem busca os trending topics para nos dar idéias de conteúdo e nos pergunta qual o assunto a ser buscado.
Após a busca pelo assunto escolhido, é ele o responsável por limpar o texto e quebrá-lo em sentenças, além de identificar todas as palavras-chaves de cada sentença.
Por último, ele gera o arquivo content.json
e salva na pasta content.
# Estrutura do arquivo content.json { "search_term": "Assunto pesquisado", "youtube_details": { "category_id": "id da categoria", "title": "Título do video", "original_content": "Texto original", "cleaned_content": "Texto limpo", "sentences": [ { "text": "Sentença", "keywords": [], "images": [], "image_search_query": "string usada na pesquisa" } ], "images_used": [], "video_filename": "nome_video.mp4" }
rimage.py
O rimage é responsável pelas imagens que serão utilizadas no video. Ele busca as imagens com base nas keywords de cada sentença, e armazena o link das 5 primeiras no atributo images de cada sentença.
Após a busca pelas imagens, ele inica o processo de download, que funciona da seguinte forma:
É feito uma tentativa de download da primeira imagem, se ele conseguir, ótimo, ele vai para a próxima sentença, senão, ele tenta a segunda imagem e assim sucessivamente.
As imagens que são baixadas são guardadas no atributo images_used
.
Por último, ele atualiza o arquivo content.json com esses novos dados.
rvideo.py
Talvez o mais desafiador entre os 4, pois até o momento era a única coisa no projeto que eu ainda não havia feito com programação… a compilação de um video. O rvideo é responsável por editar as imagens baixadas e compilar o video.
E por que a edição das imagens ficou no rvideo ? Porque as imagens da forma que foram editadas, foram feitas para o vídeo, então fazia mais sentido deixar que ele msmo trate as imagens que ele ira utilizar.
Por último, após o video compilado, ele insere o nome do arquivo de video no atributo video_filename
, salva o titulo do video no atributo youtube_details:title
e atualiza o arquivo content.json
.
ryoutube.py
O último robô a ser desenvolvido tem uma tarefa muito simples: fazer o upload do video no youtube.
Ele é reponsável por gerar o título, descrição, setar as tags e todas as configurações necessárias para o youtube, além é claro, de realizar o upload do video.
Iniciando a execução dos robôs
Para orquestrar a execução dos robôs, foi criado um arquivo index.py, onde ele é responsável por chamar a função start() de cada robô.
Por ser o mais simples de todos, deixarei esse por último.
So far So good?
Ainda ficou muito questão a ser melhorada, mas isso será assunto para a segunda versão do robô, onde tratarei da evolução dele, e o que mais podemos fazer.
Nos próximos posts começarei a mostrar como ficou o código
Um abraço, e até o próximo post!