You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wowlet-backend/wowlet_backend/tasks/forum.py

55 lines
1.7 KiB

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2020, The Monero Project.
# Copyright (c) 2020, dsc@xmr.pm
from bs4 import BeautifulSoup
from typing import List
from dateutil.parser import parse
import settings
from wowlet_backend.utils import httpget
from wowlet_backend.tasks import WowletTask
class ForumThreadsTask(WowletTask):
"""Fetch recent forum threads."""
def __init__(self, interval: int = 300):
from wowlet_backend.factory import app
super(ForumThreadsTask, self).__init__(interval)
self._cache_key = "forum"
self._cache_expiry = self.interval * 10
# url
self._http_endpoint = "https://forum.wownero.com/latest.json"
self._websocket_cmd = "forum"
async def task(self):
from wowlet_backend.factory import app
blob = await httpget(self._http_endpoint, json=True)
users = {z['id']: z for z in blob["users"]}
topics = []
for topic in blob['topic_list']['topics']:
if topic.get("pinned_globally", True):
continue
try:
u = next(z for z in topic["posters"] if "original poster" in z['description'].lower())['user_id']
href = f"https://forum.wownero.com/t/{topic['slug']}"
topics.append({
"id": topic["id"],
"title": topic["title"],
"comments": topic["posts_count"] - 1,
"created_at": parse(topic["created_at"]).strftime("%Y-%m-%d %H:%M"),
"author": users[u]['username'],
"permalink": href
})
except Exception as ex:
app.logger.error(f"skipping a forum topic; {ex}")
return topics[:25]