File size: 3,622 Bytes
686cd95
 
 
 
 
0746d2c
 
 
 
 
686cd95
 
 
 
 
 
 
 
0746d2c
686cd95
 
 
0746d2c
 
686cd95
0746d2c
 
686cd95
 
 
0746d2c
 
 
 
 
 
 
 
 
 
 
 
 
686cd95
 
 
 
0746d2c
 
 
 
 
 
 
686cd95
0746d2c
 
 
686cd95
 
 
 
 
 
0746d2c
686cd95
0746d2c
686cd95
0746d2c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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

@st.cache_resource
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