ajuste del bot

This commit is contained in:
2025-03-13 22:34:35 +01:00
parent a633fb9d1d
commit b5bfa700cf
2 changed files with 63 additions and 11 deletions

View File

@ -12,6 +12,7 @@ import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Component @Component
@ -63,18 +64,20 @@ public class TelegramBot extends TelegramLongPollingBot {
String fechaInicio = today.format(DateTimeFormatter.ISO_DATE); String fechaInicio = today.format(DateTimeFormatter.ISO_DATE);
String fechaFin = today.format(DateTimeFormatter.ISO_DATE); String fechaFin = today.format(DateTimeFormatter.ISO_DATE);
// Palabras clave de ejemplo // Obtener las palabras clave de la API
String[] keywords = {"política", "economía", "tecnología"}; List<String> keywords = ApiService.getAllKeywords();
StringBuilder mensaje = new StringBuilder("📢 *Resumen de noticias del día:*\n\n"); StringBuilder mensaje = new StringBuilder("📢 *Resumen de noticias del día:*\n\n");
for (String keyword : keywords) { for (String keyword : keywords) {
String jsonResponse = ApiService.getTitlesByKeyword(keyword, fechaInicio, fechaFin); // Obtener las noticias para cada keyword (ahora se obtiene una lista de títulos)
JSONObject jsonObject = new JSONObject(jsonResponse); List<String> titles = ApiService.getTitlesByKeyword(keyword, fechaInicio, fechaFin);
if (jsonObject.has("titles")) { if (!titles.isEmpty()) {
String titles = jsonObject.getString("titles");
mensaje.append("🔹 *").append(keyword).append("*:\n"); mensaje.append("🔹 *").append(keyword).append("*:\n");
mensaje.append(" - ").append(titles.replace(",", "\n - ")).append("\n\n"); for (String title : titles) {
mensaje.append(" - ").append(title).append("\n");
}
mensaje.append("\n");
} else { } else {
mensaje.append("🔹 *").append(keyword).append("*: No hay noticias disponibles.\n\n"); mensaje.append("🔹 *").append(keyword).append("*: No hay noticias disponibles.\n\n");
} }

View File

@ -8,6 +8,9 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import es.imunnic.inversionitasBot.TelegramBot; import es.imunnic.inversionitasBot.TelegramBot;
@ -67,8 +70,30 @@ public class ApiService {
} }
// 5⃣ Obtener todas las keywords // 5⃣ Obtener todas las keywords
public static String getAllKeywords() { public static List<String> getAllKeywords() {
return sendGetRequest("/keywords/"); String jsonResponse = sendGetRequest("/keywords/");
// Crear una lista para almacenar las keywords
List<String> keywordsList = new ArrayList<>();
try {
// Convertir la respuesta JSON en un objeto JSONObject
JSONObject jsonObject = new JSONObject(jsonResponse);
// Obtener el array de keywords
JSONArray keywordsArray = jsonObject.getJSONArray("keywords");
// Recorrer el array y agregar cada keyword a la lista
for (int i = 0; i < keywordsArray.length(); i++) {
keywordsList.add(keywordsArray.getString(i));
}
} catch (Exception e) {
// Manejo de excepciones, puedes hacer más aquí si es necesario
logger.error("Error al procesar los datos JSON", e);
}
// Retornar la lista de keywords
return keywordsList;
} }
// 6⃣ Contar noticias por fuente con una keyword y rango de fechas // 6⃣ Contar noticias por fuente con una keyword y rango de fechas
@ -78,9 +103,33 @@ public class ApiService {
} }
// 7⃣ Obtener títulos de noticias por keyword en un rango de fechas // 7⃣ Obtener títulos de noticias por keyword en un rango de fechas
public static String getTitlesByKeyword(String keyword, String fechaInicio, String fechaFin) { public static List<String> getTitlesByKeyword(String keyword, String fechaInicio, String fechaFin) {
String params = "?keyword=" + encodeParam(keyword) + "&fecha_inicio=" + fechaInicio + "&fecha_fin=" + fechaFin; String params = "?keyword=" + encodeParam(keyword) + "&fecha_inicio=" + fechaInicio + "&fecha_fin=" + fechaFin;
return sendGetRequest("/titles/by-keyword/date-range" + params); String jsonResponse = sendGetRequest("/titles/by-keyword/date-range" + params);
List<String> titlesList = new ArrayList<>();
try {
// Convertir la respuesta JSON en un objeto JSONObject
JSONObject jsonObject = new JSONObject(jsonResponse);
// Verificar si el JSON contiene el array de títulos
if (jsonObject.has("titles")) {
// Obtener el array de títulos
JSONArray titlesArray = jsonObject.getJSONArray("titles");
// Recorrer el array y agregar cada título a la lista
for (int i = 0; i < titlesArray.length(); i++) {
titlesList.add(titlesArray.getString(i));
}
}
} catch (Exception e) {
// Manejo de excepciones, puedes hacer más aquí si es necesario
logger.error("Error al procesar los títulos de noticias", e);
}
// Retornar la lista de títulos
return titlesList;
} }
// 8⃣ Obtener todos los títulos de noticias en un rango de fechas // 8⃣ Obtener todos los títulos de noticias en un rango de fechas