placeholder api integration

This commit is contained in:
Corban-Lee Jones 2024-02-07 01:03:00 +00:00
parent 343767c755
commit 5b8ef98eca

View File

@ -8,13 +8,15 @@ import datetime
from os import getenv
from time import process_time
import aiohttp
from discord import TextChannel
from discord import app_commands
from discord.ext import commands, tasks
from discord.errors import Forbidden
from sqlalchemy import insert, select, and_
from feedparser import parse
from feed import Source, Article
from feed import Source, Article, RSSFeed
from db import (
DatabaseManager,
FeedChannelModel,
@ -22,11 +24,13 @@ from db import (
SentArticleModel
)
from utils import get_unparsed_feed
from api import API
log = logging.getLogger(__name__)
TASK_INTERVAL_MINUTES = getenv("TASK_INTERVAL_MINUTES")
# task trigger times : must be of type list
times = [
datetime.time(hour, minute, tzinfo=datetime.timezone.utc)
for hour in range(24)
@ -61,20 +65,37 @@ class TaskCog(commands.Cog):
self.rss_task.cancel()
@tasks.loop(minutes=10)
@app_commands.command(name="debug-trigger-task")
async def debug_trigger_task(self, inter):
await inter.response.defer()
await self.rss_task()
await inter.followup.send("done")
@tasks.loop(time=times)
async def rss_task(self):
"""Automated task responsible for processing rss feeds."""
log.info("Running rss task")
time = process_time()
async with DatabaseManager() as database:
query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel)
result = await database.session.execute(query)
feeds = result.scalars().all()
# async with DatabaseManager() as database:
# query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel)
# result = await database.session.execute(query)
# feeds = result.scalars().all()
# for feed in feeds:
# await self.process_feed(feed, database)
guild_ids = [guild.id for guild in self.bot.guilds]
async with aiohttp.ClientSession() as session:
api = API(self.bot.api_token, session)
data, count = await api.get_rssfeed_list(discord_server_id__in=guild_ids)
rssfeeds = RSSFeed.from_list(data)
for item in rssfeeds:
log.info(item.name)
for feed in feeds:
await self.process_feed(feed, database)
log.info("Finished rss task, time elapsed: %s", process_time() - time)
@ -95,7 +116,7 @@ class TaskCog(commands.Cog):
# TODO: integrate the `validate_feed` code into here, also do on list command and show errors.
unparsed_content = await self.bot.functions.get_unparsed_feed(feed.rss_source.rss_url)
unparsed_content = await get_unparsed_feed(feed.rss_source.rss_url)
parsed_feed = parse(unparsed_content)
source = Source.from_parsed(parsed_feed)
articles = source.get_latest_articles(5)