placeholder api integration
This commit is contained in:
parent
343767c755
commit
5b8ef98eca
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user