placeholder api integration
This commit is contained in:
parent
343767c755
commit
5b8ef98eca
@ -8,13 +8,15 @@ import datetime
|
|||||||
from os import getenv
|
from os import getenv
|
||||||
from time import process_time
|
from time import process_time
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
from discord import TextChannel
|
from discord import TextChannel
|
||||||
|
from discord import app_commands
|
||||||
from discord.ext import commands, tasks
|
from discord.ext import commands, tasks
|
||||||
from discord.errors import Forbidden
|
from discord.errors import Forbidden
|
||||||
from sqlalchemy import insert, select, and_
|
from sqlalchemy import insert, select, and_
|
||||||
from feedparser import parse
|
from feedparser import parse
|
||||||
|
|
||||||
from feed import Source, Article
|
from feed import Source, Article, RSSFeed
|
||||||
from db import (
|
from db import (
|
||||||
DatabaseManager,
|
DatabaseManager,
|
||||||
FeedChannelModel,
|
FeedChannelModel,
|
||||||
@ -22,11 +24,13 @@ from db import (
|
|||||||
SentArticleModel
|
SentArticleModel
|
||||||
)
|
)
|
||||||
from utils import get_unparsed_feed
|
from utils import get_unparsed_feed
|
||||||
|
from api import API
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
TASK_INTERVAL_MINUTES = getenv("TASK_INTERVAL_MINUTES")
|
TASK_INTERVAL_MINUTES = getenv("TASK_INTERVAL_MINUTES")
|
||||||
|
|
||||||
|
# task trigger times : must be of type list
|
||||||
times = [
|
times = [
|
||||||
datetime.time(hour, minute, tzinfo=datetime.timezone.utc)
|
datetime.time(hour, minute, tzinfo=datetime.timezone.utc)
|
||||||
for hour in range(24)
|
for hour in range(24)
|
||||||
@ -61,20 +65,37 @@ class TaskCog(commands.Cog):
|
|||||||
|
|
||||||
self.rss_task.cancel()
|
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):
|
async def rss_task(self):
|
||||||
"""Automated task responsible for processing rss feeds."""
|
"""Automated task responsible for processing rss feeds."""
|
||||||
|
|
||||||
log.info("Running rss task")
|
log.info("Running rss task")
|
||||||
time = process_time()
|
time = process_time()
|
||||||
|
|
||||||
async with DatabaseManager() as database:
|
# async with DatabaseManager() as database:
|
||||||
query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel)
|
# query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel)
|
||||||
result = await database.session.execute(query)
|
# result = await database.session.execute(query)
|
||||||
feeds = result.scalars().all()
|
# 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)
|
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.
|
# 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)
|
parsed_feed = parse(unparsed_content)
|
||||||
source = Source.from_parsed(parsed_feed)
|
source = Source.from_parsed(parsed_feed)
|
||||||
articles = source.get_latest_articles(5)
|
articles = source.get_latest_articles(5)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user