Agenda dos jogos do Flamengo na área de trabalho com conky

evertontenorio

Everton Tenorio

Posted on April 9, 2024

Agenda dos jogos do Flamengo na área de trabalho com 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

💖 💪 🙅 🚩
evertontenorio
Everton Tenorio

Posted on April 9, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related