File size: 2,720 Bytes
c2e2750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import requests
from loguru import logger
from typing import List, Dict, Any

class TwitterAPI:
    """

    Integração simples com Twitter API v2 para busca de 'tretas' e 'mitadas'.

    """
    def __init__(self, bearer_token: str = None):
        self.bearer_token = bearer_token or os.getenv("TWITTER_BEARER_TOKEN")
        self.base_url = "https://api.twitter.com/2"

    def search_tweets(self, query: str, max_results: int = 10) -> List[Dict[str, Any]]:
        """

        Busca tweets recentes com base em uma query.

        """
        if not self.bearer_token:
            logger.warning("⚠️ TWITTER_BEARER_TOKEN não configurado.")
            return []

        headers = {
            "Authorization": f"Bearer {self.bearer_token}",
            "User-Agent": "v2RecentSearchPython"
        }

        params = {
            "query": f"{query} lang:pt -is:retweet",
            "max_results": max_results,
            "tweet.fields": "text,public_metrics,created_at"
        }

        try:
            response = requests.get(f"{self.base_url}/tweets/search/recent", headers=headers, params=params)
            if response.status_code == 200:
                data = response.json()
                return data.get("data", [])
            else:
                logger.error(f"❌ Erro Twitter API ({response.status_code}): {response.text}")
                return []
        except Exception as e:
            logger.error(f"❌ Falha ao buscar tweets: {e}")
            return []

    def get_savage_context(self, topic: str) -> str:
        """

        Busca exemplos de 'mitadas' ou discussões acaloradas sobre um tema.

        """
        queries = [
            f"{topic} mita",
            f"{topic} treta",
            f"{topic} cancelado",
            f"{topic} 'na cara'",
            f"{topic} 'jantou'"
        ]
        
        all_tweets = []
        for q in queries[:2]: # Tenta as 2 primeiras queries para economizar cota
            tweets = self.search_tweets(q, max_results=10)
            all_tweets.extend(tweets)
            if len(all_tweets) >= 10: break

        if not all_tweets:
            return "Nenhuma 'treta' recente encontrada no Twitter sobre este assunto."

        context = "Exemplos de discussões/mitadas no Twitter sobre este assunto:\n"
        for i, tweet in enumerate(all_tweets[:10]):
            text = tweet['text'].replace('\n', ' ')
            context += f"{i+1}. {text}\n"
        
        return context

# Singleton
_instance = None
def get_twitter_api():
    global _instance
    if _instance is None:
        _instance = TwitterAPI()
    return _instance