PI_Assync_SCDE/Infrastructure/CalendarioService.cs

96 lines
4.7 KiB
C#

using System.Text.Json;
using System.Globalization;
using Application;
namespace Infrastructure
{
public class CalendarioService : ICalendarioService
{
private const string Url = "https://www.ccee.org.br/en/web/guest/calendario?p_p_id=com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn&p_p_lifecycle=2&p_p_cacheability=cacheLevelPage&doAsUserId=&p_p_resource_id=calendarBookings";
public async Task<double?> ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default)
{
var year = dataReferencia.Year;
var month = dataReferencia.Month - 1;
var dayFinal = DateTime.DaysInMonth(year, month + 1);
var values = new Dictionary<string, string>
{
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_calendarIds"] = "55985",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeDay"] = dayFinal.ToString(),
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeHour"] = "23",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMinute"] = "59",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMonth"] = month.ToString(),
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeYear"] = year.ToString(),
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_eventsPerPage"] = "-1",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeDay"] = "1",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeHour"] = "0",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMinute"] = "0",
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMonth"] = month.ToString(),
["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeYear"] = year.ToString(),
};
try
{
using var client = new HttpClient();
using var content = new FormUrlEncodedContent(values);
var resp = await client.PostAsync(Url, content, ct);
var resposta = await resp.Content.ReadAsStringAsync(ct);
var alvo = $"Data limite para coleta diária dos dados de medição no SCDE";
try
{
using var doc = JsonDocument.Parse(resposta);
double? encontrado = null;
double? startTimeDay = null;
void SearchJson(JsonElement el)
{
if (encontrado != null) return;
if (el.ValueKind == JsonValueKind.Object)
{
// Verifica se alguma propriedade contém o texto alvo
foreach (var prop in el.EnumerateObject())
{
if (prop.Value.ValueKind == JsonValueKind.String)
{
var s = prop.Value.GetString() ?? "";
if (s.Contains(alvo, StringComparison.OrdinalIgnoreCase))
{
// Encontrou o evento, extrair dados do mesmo objeto
if (el.TryGetProperty("startTimeDay", out var day))
startTimeDay = day.GetInt32();
if (startTimeDay != null)
encontrado = startTimeDay;
return;
}
}
}
foreach (var prop in el.EnumerateObject())
SearchJson(prop.Value);
}
else if (el.ValueKind == JsonValueKind.Array)
{
foreach (var item in el.EnumerateArray())
SearchJson(item);
}
}
SearchJson(doc.RootElement);
if (encontrado != null) return encontrado;
}
catch { }
return null;
}
catch
{
return null;
}
}
}
}