Python na prática: Projeto Video Creator – #Parte 1: Arquitetura da aplicação

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!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *