DEV Community

Everton Tenorio
Everton Tenorio

Posted on

Hoje tem Flamengo! no conky

fla-conky

Diante de tantas prioridades no dia, gostaríamos de ficar sempre que possível, atualizados sobre tudo: principais notícias, cotação do dólar, assuntos mais comentados no momento, quando, onde e contra quem nosso time do coração irá jogar.

Através da tecnologia, programar e, de preferência, com Python, nos permite estar à frente para usufruir de um mundo cheio de informações, ficando ligados em tudo o que acontece de uma forma mais prática e eficiente.

Criei um script que me informa na área de trabalho do computador quais são os próximos jogos do Flamengo. Utilizei Python para realizar web scraping e Conky para exibir um painel personalizado com as informações que preciso.

Conky

O Conky é um monitor de sistema altamente personalizável para sistemas Linux Like. Por meio de arquivos de configuração, além dos painéis de monitoramento do sistema, é possível personalizar novos painéis do Conky na área de trabalho. Saiba mais sobre o conky.

Flamengo

O maior time do mundo, com a maior torcida do mundo, etc., e mais uma vez sendo mencionado aqui, servindo-me de inspiração para criar algumas ideias utilizando tecnologia.

Scraping

Utilizando Python e bibliotecas como requests e BeautifulSoup4, a ideia é realizar um scraping no site do Flamengo capturando as informações dos próximos jogos do clube e exibi-las no Conky.

Disclaimer Importante:
Este exemplo prático de web scraping tem como propósito educacional, demonstração e utilização técnica. É crucial respeitar os termos de serviço e políticas de privacidade dos sites ao realizar atividades de web scraping. Todo o conteúdo, marcas, e propriedades intelectuais mencionadas no exemplo pertencem ao C.R. do Flamengo.

Podemos verificar os próximos jogos acessando a url https://www.flamengo.com.br/jogos/

Importação das bibliotecas

import requests
import os
from bs4 import BeautifulSoup
Enter fullscreen mode Exit fullscreen mode

Utilização de headers e acessando a url

É comum utilizar headers para simular o comportamento de um navegador web real, alguns dos motivos disso é evitar que os sites possam bloquear ip's, ter garantia de receber o conteúdo da mesma forma que é vista no navegador e respeitar as políticas do site fornecendo confiabilidade ao servidor.

A lib requests permite acessar o site e ter a resposta do conteúdo desse site.

O uso do timeout no requests evita espera indefinida, melhora eficiência, previne bloqueios de thread(travamento do script) e trata erros de conexão de forma adequada.

# URL do site do Flamengo
url = "https://www.flamengo.com.br/jogos/"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# Faz a requisição HTTP
response = requests.get(url, headers=headers, timeout=5)
Enter fullscreen mode Exit fullscreen mode

Estrutura html e manipulação das tags com BeautifulSoup

É preciso identificar a estrutura base do html onde será feita a coleta das informações manipuladas pelo BeautifulSoup, que aqui é a div com uma classe chamada "panel-games".

Flamengo html

A variável content terá as informações extraídas pelo BeautifulSoup e será o conteúdo a ser interpretado e exibido pelo conky através de um arquivo de texto, utilizando os parâmetros necessários para a personalização do painel.

O loop for pecorrerá toda a div e novas variáveis(month, games, tournament, teams, etc) são criadas para ter valores atribuídos extraídos das tags html existentes de dentro da div, os famosos elementos filhos da div pai panel-games.

Essas variáveis são usadas no content como forma de seus valores serem salvos e interpretados como texto puro.

# Cria o objeto BeautifulSoup para analisar o HTML
        soup = BeautifulSoup(response.text, 'html.parser')

        # Encontra os elementos com a classe 'panel-games'
        panel_games = soup.find_all(class_='panel-games')

        content = ""

        # Itera sobre cada panel-games encontrado
        for panel_game in panel_games:

            # Extrai o mês
            month_tag = panel_game.find('h2')
            if month_tag:
                month = month_tag.get_text(strip=True)
            else:
                continue

            content += f"${{color red}}\n${{font Arial Black:size=12}}{month}$font$color\n\n"

            # Extrai as informações de cada jogo
            games = panel_game.find_all(class_='py-4')

            for game in games:
                # Extrai a data e horário do jogo
                date_time_tag = game.find('p')
                if date_time_tag:
                    date_time = date_time_tag.get_text(strip=True)
                    content += f"{date_time}\n"
                else:
                    continue

                # Extrai o torneio
                tournament_tag = game.find(class_='destaque')
                if tournament_tag:
                    tournament = tournament_tag.get_text(strip=True)
                    content += f"${{color red}}{tournament}$color ${{alignr}}${{color gray}}${{font Arial Black:size=5}}{formatted_date}${{font}}$color\n\n"
                else:
                    continue

                # Extrai os times
                teams_tag = game.find(class_='game-teams')
                if teams_tag:
                    teams = teams_tag.find_all('p', class_='d-none d-lg-inline-block')
                    if len(teams) == 2:
                        team1 = teams[0].get_text(strip=True)
                        team2 = teams[1].get_text(strip=True)
                        content += f"${{alignc}}${{color white}}${{font Arial Black:size=12}}{team1} x {team2}${{font}}$color\n\n"
                    else:
                        continue
                else:
                    continue
Enter fullscreen mode Exit fullscreen mode

Salvando o conteúdo(content) em um arquivo txt chamado flamengo-jogos.txt que será lido no arquivo de configuração do conky para ser exibido no painel.

        # Salva o conteúdo no arquivo flamengo-jogos.txt
        with open("flamengo-jogos.txt", "w") as file:
            file.write(content)

        print("Arquivo flamengo-jogos.txt criado com sucesso.")
Enter fullscreen mode Exit fullscreen mode

O código completo disponível aqui: fla-conky

O arquivo de configuração do painel para o Conky - fla-conky.conf

O arquivo de configuração fla-conky.conf é o arquivo referente ao painel dos jogos do Flamengo exibido na área de trabalho.

O arquivo contém parâmetros que definem a aparência, transparência, intervalo de atualização, fonte e margens. Esses parâmetros controlam a exibição e o estilo das informações na área de trabalho.

No final, é utilizado o comando execpi para executar um comando a cada intervalo especificado (100 segundos neste caso) e exibir o resultado na área de trabalho. O comando cat é usado para mostrar o conteúdo do arquivo /home/.../fla-conky/flamengo-jogos.txt, que contém informações sobre os jogos.

conky.config = {
    default_color = '#afafaf',

    own_window = true,
    own_window_transparent = true,
    own_window_argb_visual = true,
    own_window_argb_value = 180,
    own_window_type = 'normal',
    own_window_colour = '#000000',
    own_window_hints = 'undecorated, below, sticky, skip_taskbar, skip_pager',

    update_interval = 1.0,
    double_buffer = true,
    use_spacer = 'right',

    alignment = 'bottom_left',
    use_xft = true,
    font = 'Monospace:size=8:style=semibold',

    border_inner_margin = 10,
    border_outer_margin = 0,
    border_width = 1,
    draw_graph_borders = true,

    gap_x = 100,
    gap_y = 580,
}

conky.text = [[
  ${execpi 100 cat /home/.../fla-conky/flamengo-jogos.txt}
]] 
Enter fullscreen mode Exit fullscreen mode

Resultado

E assim ficou o painel exibido na área de trabalho. Tentarei depois exibir também os emblemas, mas no momento esse painel me atende em relação a quando, onde e contra quem o Flamengo joga.

fla-conky-desktop

Top comments (0)