Spaces:
Sleeping
Sleeping
import re | |
import requests | |
from bs4 import BeautifulSoup | |
from urllib.parse import urlparse, unquote | |
import streamlit as st | |
from openai import OpenAI | |
from qdrant_client import QdrantClient | |
import edgedb | |
import os | |
def extract_content(text, tag): | |
"""Extrai conteúdo de um texto com base na tag fornecida.""" | |
pattern = rf'<{tag}>(.*?)</{tag}>' | |
match = re.search(pattern, text, re.DOTALL) | |
return match.group(1).strip() if match else None | |
def fetch_webpage_content(url): | |
"""Obtém o conteúdo HTML de uma URL e retorna o conteúdo principal, desativando links específicos, mas mantendo os links originais para sugestões.""" | |
try: | |
response = requests.get(url) | |
response.raise_for_status() | |
# Usando BeautifulSoup para processar o HTML | |
soup = BeautifulSoup(response.text, 'html.parser') | |
# Localiza o conteúdo principal pelo ID 'main' | |
main_content = soup.find('div', id='main') | |
if main_content: | |
# Armazenar os links originais para sugestões | |
original_links = [link['href'] for link in main_content.find_all('a', class_='govbr-card-content')] | |
# Desativar links com a classe "govbr-card-content" (apenas visualmente) | |
for link in main_content.find_all('a', class_='govbr-card-content'): | |
link['href'] = 'javascript:void(0);' # Impede a navegação | |
link['style'] = 'pointer-events: none; cursor: not-allowed;' # Estilo para desativar visualmente | |
# Remover elementos específicos (exemplo: div com a classe 'outstanding-header') | |
for unwanted_element in main_content.find_all('div', class_='outstanding-header'): | |
unwanted_element.decompose() # Remove o elemento do DOM | |
# Limpa o conteúdo do <body> e insere o conteúdo principal | |
body_tag = soup.find('body') | |
if body_tag: | |
body_tag.clear() | |
body_tag.append(main_content) | |
# Retorna o conteúdo modificado e os links originais | |
return str(soup), original_links | |
# Mensagem de erro caso não encontre o conteúdo principal | |
return "<html><body><p>Could not find main content on the page.</p></body></html>", [] | |
except requests.RequestException as e: | |
# Retorna uma mensagem de erro em caso de falha na requisição | |
return f"<html><body><p>Error fetching the webpage: {str(e)}</p></body></html>", [] | |
def extract_links(html_content): | |
"""Extrai todos os links (URLs) de um conteúdo HTML.""" | |
soup = BeautifulSoup(html_content, 'html.parser') | |
return [a_tag['href'] for a_tag in soup.find_all('a', href=True)] | |
def url_to_suggestion(url): | |
"""Converte uma URL longa em uma sugestão amigável e natural.""" | |
path = unquote(urlparse(url).path).strip('/').split('/') | |
# Garantir que há pelo menos duas partes significativas no caminho | |
if len(path) > 2: | |
# Remover hífens e capitalizar cada palavra | |
section = path[-2].replace('-', ' ').title() | |
subsection = path[-1].replace('-', ' ').title() | |
# Formatar a sugestão de forma mais natural | |
return f"Acesso à seção '{section}' sobre '{subsection}'" | |
return None | |
def connect_to_services(): | |
oa_client = OpenAI( | |
api_key=os.environ.get("OPENAI_API_KEY") | |
) | |
qdrant_client = QdrantClient( | |
url=os.environ.get("QDRANT_URL"), | |
api_key=os.environ.get("QDRANT_KEY") | |
) | |
edgedb_client = edgedb.create_client() | |
return oa_client, qdrant_client, edgedb_client |