浏览代码

cooperativa bot and fixed tz remindme bot

Pablo B.Y 1 周之前
父节点
当前提交
f2267c62d9
共有 6 个文件被更改,包括 49 次插入14 次删除
  1. 1 1
      .env.example
  2. 14 6
      src/agents/remindme/index.ts
  3. 2 1
      src/config.ts
  4. 6 6
      src/index.ts
  5. 4 0
      src/portales/cooperativa/definition.yml
  6. 22 0
      src/portales/cooperativa/handler.ts

+ 1 - 1
.env.example

@@ -12,7 +12,7 @@ DEFAULT_LOCALE = "es-CL"
 CHILECULTURA = "https://chilecultura.gob.cl/events/"
 CIPER = "https://www.ciperchile.cl/actualidad/"
 CODEXVERDE = "https://codexverde.cl/"
-COOPERATIVA = "https://cooperativa.cl/noticias/site/cache/nroedic/todas/"
+COOPERATIVA = "https://www.cooperativa.cl/"
 LOG_LEVEL = "debug"
 REDIS_CONN = "redis://localhost:6379/10"
 PUPPETEER_URL = "http://localhost:8000/api/v1/visit"

+ 14 - 6
src/agents/remindme/index.ts

@@ -1,5 +1,5 @@
 import { createStreamingAPIClient, createRestAPIClient, mastodon } from "masto";
-import { toZonedTime } from "date-fns-tz";
+import { toZonedTime, fromZonedTime, formatInTimeZone } from "date-fns-tz";
 import * as chrono from "chrono-node";
 
 import config from "../../config";
@@ -30,7 +30,8 @@ export default class Remindme {
   }
 
   private parseTime(message: string): Array<chrono.ParsedResult> {
-    const parsed = chrono.es.parse(message, new Date(), { forwardDate: true });
+    const referenceDate = toZonedTime(new Date(), config.DEFAULT_TIMEZONE);
+    const parsed = chrono.es.parse(message, referenceDate, { forwardDate: true });
 
     if (!parsed) {
       throw new Error(`No pude entender el recordatorio ${Emojis.SAD_FACE}`);
@@ -70,7 +71,10 @@ export default class Remindme {
 
               console.log("parsedtime", parsedTime[0].date().getTime());
 
-              if (parsedTime[0].date().getTime() <= Date.now()) {
+	      const localDate = parsedTime[0].date();
+	      const utcDate = fromZonedTime(localDate, config.DEFAULT_TIMEZONE);
+
+              if (utcDate.getTime() <= Date.now()) {
                 throw new Error(`@${event.payload.account.acct} El tiempo ingresado ya pasó ${Emojis.HOURGLASS}`);
               }
 
@@ -86,10 +90,14 @@ export default class Remindme {
                 console.log("Reminder Payload", payload);
               }
 
-	      const parsedTimeToDefaultTZ = toZonedTime(parsedTime[0].date(), config.DEFAULT_TIMEZONE);  
+              await this.scheduleReminder(utcDate.getTime(), payload);
 
-              await this.scheduleReminder(parsedTime[0].date().getTime(), payload);
-              status = `@${event.payload.account.acct} \nRecordatorio establecido ${Emojis.CALENDAR}${Emojis.CHECK} \nTe avisaré el ${parsedTimeToDefaultTZ.toLocaleString(config.DEFAULT_LOCALE)}`;
+	      const formattedDate = formatInTimeZone(
+		utcDate,
+		config.DEFAULT_TIMEZONE,
+		"dd-MM-yyyy HH:mm"
+	      );
+              status = `@${event.payload.account.acct} \nRecordatorio establecido ${Emojis.CALENDAR}${Emojis.CHECK} \nTe avisaré el ${formattedDate}`;
 
             } catch (error: any) {
               status = error.message;

+ 2 - 1
src/config.ts

@@ -15,6 +15,7 @@ const config = {
   CIPER: process.env.CIPER ?? "https://www.ciperchile.cl/actualidad/",
   CODEXVERDE: process.env.CODEXVERDE ?? "https://codexverde.cl/",
   CONTRAPODER: process.env.CONTRAPODER ?? "https://contrapoderchile.cl/category/portada/",
+  COOPERATIVA: process.env.COOPERATIVA ?? "https://www.cooperativa.cl/",
   // COOPERATIVA: process.env.COOPERATIVA ?? "https://cooperativa.cl/noticias/site/cache/nroedic/todas/",
   DF: process.env.DF ?? "https://www.df.cl/ultimasnoticias",
   ELCIUDADANO: process.env.ELCIUDADANO ?? "https://www.elciudadano.com/chile/",
@@ -35,7 +36,7 @@ const config = {
   MASTODON_KEY_CIPER: process.env.MASTODON_KEY_CIPER ?? "",
   MASTODON_KEY_CODEXVERDE: process.env.MASTODON_KEY_CODEXVERDE ?? "",
   MASTODON_KEY_CONTRAPODER: process.env.MASTODON_KEY_CONTRAPODER ?? "",
-  // MASTODON_KEY_COOPERATIVA: process.env.MASTODON_KET_COOPERATIVA ?? "",
+  MASTODON_KEY_COOPERATIVA: process.env.MASTODON_KEY_COOPERATIVA ?? "",
   MASTODON_KEY_DF: process.env.MASTODON_KEY_DF ?? "",
   MASTODON_KEY_ELCIUDADANO: process.env.MASTODON_KEY_ELCIUDADANO ?? "",
   MASTODON_KEY_ELDESCONCIERTO: process.env.MASTODON_KEY_ELDESCONCIERTO ?? "",

+ 6 - 6
src/index.ts

@@ -6,17 +6,17 @@ import { handler as chilecultura } from "./portales/chilecultura/handler";
 import { handler as ciper } from "./portales/ciper/handler";
 import { handler as codexverde } from "./portales/codexverde/handler";
 import { handler as contrapoder } from "./portales/contrapoder/handler";
-// import { handler as cooperativa } from "./portales/cooperativa/handler";
+import { handler as cooperativa } from "./portales/cooperativa/handler";
 import { handler as df } from "./portales/df/handler";
 import { handler as elciudadano } from "./portales/elciudadano/handler";
 import { handler as eldesconcierto } from "./portales/eldesconcierto/handler";
 import { handler as elmostrador } from "./portales/elmostrador/handler";
 import { handler as fastcheck } from "./portales/fastcheck/handler";
-import { handler as glaciareschilenos } from "./portales/glaciareschilenos/handler";
+// import { handler as glaciareschilenos } from "./portales/glaciareschilenos/handler";
 import { handler as emol } from "./portales/emol/handler";
 import { handler as interferencia } from "./portales/interferencia/handler";
 import { handler as laderasur } from "./portales/laderasur/handler";
-import { handler as latercera } from "./portales/latercera/handler";
+// import { handler as latercera } from "./portales/latercera/handler";
 // import { handler as metrodesantiago } from "./portales/metrodesantiago/handler";
 import { handler as tarreo } from "./portales/tarreo/handler";
 import { handler as theclinic } from "./portales/theclinic/handler";
@@ -41,17 +41,17 @@ const portalsHandlers = {
   "ciper": ciper,
   "codexverde": codexverde,
   "contrapoder": contrapoder,
-  // "cooperativa": cooperativa,
+  "cooperativa": cooperativa,
   "df": df,
   "elciudadano": elciudadano,
   "eldesconcierto": eldesconcierto,
   "elmostrador": elmostrador,
   "emol": emol,
   "fastcheck": fastcheck,
-  "glaciareschilenos": glaciareschilenos,
+  // "glaciareschilenos": glaciareschilenos,
   "interferencia": interferencia,
   "laderasur": laderasur,
-  "latercera": latercera,
+  // "latercera": latercera,
   // "metrodesantiago": metrodesantiago,
   "tarreo": tarreo,
   "theclinic": theclinic

+ 4 - 0
src/portales/cooperativa/definition.yml

@@ -0,0 +1,4 @@
+emol:
+  handler: ./src/portales/cooperativa/handler.handler
+  events: 
+    - schedule: rate(1 hour)

+ 22 - 0
src/portales/cooperativa/handler.ts

@@ -0,0 +1,22 @@
+import { type Handler } from "aws-lambda";
+
+import config from "../../config";
+import Portal from "../portal";
+import ScraperMethods from "../../enums/scraper-methods";
+
+const name = `Cooperativa.cl: Noticias de Chile y el mundo - País, Deportes y más`;
+
+export const handler: Handler = new Portal(
+  name, 
+  config.MASTODON_KEY_COOPERATIVA,
+  {
+    url: config.COOPERATIVA,
+    articlesSelector: "section > div:nth-of-type(3) article",
+    titleSelector: "h1.titular-noticia, h3.titular-noticia",
+    linkPrefix: "https://www.cooperativa.cl",
+    linkSelector: "article > a:nth-of-type(2)",
+    scraperMethod: ScraperMethods.AXIOS,
+    hashtags: ["Noticias", "País", "Deportes", "Mundo"],
+    cacheExpiration: 60 * 60 * 24 * 30, // 30 días
+  }
+).getHandler();