Everton Tenorio
Posted on April 9, 2024
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
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)
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".
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
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.")
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}
]]
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.
Posted on April 9, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.