Riorganizza e rinomina funzioni di estrazione in moduli di mercato e notizie; migliora la gestione delle importazioni

This commit is contained in:
2025-10-03 19:40:14 +02:00
parent b85d74a662
commit 8d1cae8706
19 changed files with 119 additions and 118 deletions

View File

@@ -1,10 +1,10 @@
from agno.tools import Toolkit
from app.utils.wrapper_handler import WrapperHandler
from .base import NewsWrapper, Article
from .news_api import NewsApiWrapper
from .googlenews import GoogleNewsWrapper
from .cryptopanic_api import CryptoPanicWrapper
from .duckduckgo import DuckDuckGoWrapper
from app.news.base import NewsWrapper, Article
from app.news.news_api import NewsApiWrapper
from app.news.googlenews import GoogleNewsWrapper
from app.news.cryptopanic_api import CryptoPanicWrapper
from app.news.duckduckgo import DuckDuckGoWrapper
__all__ = ["NewsAPIsTool", "NEWS_INSTRUCTIONS", "NewsApiWrapper", "GoogleNewsWrapper", "CryptoPanicWrapper", "DuckDuckGoWrapper"]
@@ -42,6 +42,8 @@ class NewsAPIsTool(NewsWrapper, Toolkit):
tools=[
self.get_top_headlines,
self.get_latest_news,
self.get_top_headlines_aggregated,
self.get_latest_news_aggregated,
],
)

View File

@@ -1,5 +1,6 @@
from pydantic import BaseModel
class Article(BaseModel):
source: str = ""
time: str = ""

View File

@@ -1,7 +1,8 @@
import os
import requests
from enum import Enum
from .base import NewsWrapper, Article
from app.news.base import NewsWrapper, Article
class CryptoPanicFilter(Enum):
RISING = "rising"
@@ -18,7 +19,7 @@ class CryptoPanicKind(Enum):
MEDIA = "media"
ALL = "all"
def get_articles(response: dict) -> list[Article]:
def extract_articles(response: dict) -> list[Article]:
articles = []
if 'results' in response:
for item in response['results']:
@@ -73,5 +74,5 @@ class CryptoPanicWrapper(NewsWrapper):
assert response.status_code == 200, f"Error fetching data: {response}"
json_response = response.json()
articles = get_articles(json_response)
articles = extract_articles(json_response)
return articles[:limit]

View File

@@ -1,8 +1,9 @@
import json
from .base import Article, NewsWrapper
from agno.tools.duckduckgo import DuckDuckGoTools
from app.news.base import Article, NewsWrapper
def create_article(result: dict) -> Article:
def extract_article(result: dict) -> Article:
article = Article()
article.source = result.get("source", "")
article.time = result.get("date", "")
@@ -23,10 +24,10 @@ class DuckDuckGoWrapper(NewsWrapper):
def get_top_headlines(self, limit: int = 100) -> list[Article]:
results = self.tool.duckduckgo_news(self.query, max_results=limit)
json_results = json.loads(results)
return [create_article(result) for result in json_results]
return [extract_article(result) for result in json_results]
def get_latest_news(self, query: str, limit: int = 100) -> list[Article]:
results = self.tool.duckduckgo_news(query or self.query, max_results=limit)
json_results = json.loads(results)
return [create_article(result) for result in json_results]
return [extract_article(result) for result in json_results]

View File

@@ -1,7 +1,8 @@
from gnews import GNews
from .base import Article, NewsWrapper
from app.news.base import Article, NewsWrapper
def result_to_article(result: dict) -> Article:
def extract_article(result: dict) -> Article:
article = Article()
article.source = result.get("source", "")
article.time = result.get("publishedAt", "")
@@ -21,7 +22,7 @@ class GoogleNewsWrapper(NewsWrapper):
articles = []
for result in results:
article = result_to_article(result)
article = extract_article(result)
articles.append(article)
return articles
@@ -31,6 +32,6 @@ class GoogleNewsWrapper(NewsWrapper):
articles = []
for result in results:
article = result_to_article(result)
article = extract_article(result)
articles.append(article)
return articles

View File

@@ -1,8 +1,9 @@
import os
import newsapi
from .base import Article, NewsWrapper
from app.news.base import Article, NewsWrapper
def result_to_article(result: dict) -> Article:
def extract_article(result: dict) -> Article:
article = Article()
article.source = result.get("source", {}).get("name", "")
article.time = result.get("publishedAt", "")
@@ -37,7 +38,7 @@ class NewsApiWrapper(NewsWrapper):
for page in range(1, pages + 1):
headlines = self.client.get_top_headlines(q="", category=self.category, language=self.language, page_size=page_size, page=page)
results = [result_to_article(article) for article in headlines.get("articles", [])]
results = [extract_article(article) for article in headlines.get("articles", [])]
articles.extend(results)
return articles
@@ -47,7 +48,7 @@ class NewsApiWrapper(NewsWrapper):
for page in range(1, pages + 1):
everything = self.client.get_everything(q=query, language=self.language, sort_by="publishedAt", page_size=page_size, page=page)
results = [result_to_article(article) for article in everything.get("articles", [])]
results = [extract_article(article) for article in everything.get("articles", [])]
articles.extend(results)
return articles