| 123456789101112131415161718192021222324252627282930313233 | import time
import feedparser
from flask import Flask, render_template
from bs4 import BeautifulSoup
application = Flask(__name__)
@application.route('/<string:lang>/<string:instance>/<string:user>/<string:tag>')
def my_masto_tag(lang, instance, user, tag):
    lang = lang.lower()
    is_rtl = lang in ['he', 'ar']  # TODO: A less lame to determine rtl
    title = f'@{user}@{instance} — #{tag}'
    feed = feedparser.parse(f'https://{instance}/@{user}/tagged/{tag}.rss')
    for e in feed['entries']:
        e['date'] = time.strftime('%Y-%m-%d', e['published_parsed'])
        soup = BeautifulSoup(e['description'], 'html.parser')
        for link in soup.find_all('a'):
            link['target'] = '_blank'
            link['class'] = ['link-info', 'text-decoration-none']
        e['description'] = str(soup)
        images = []
        videos =[]
        for m in e['media_content']:
            mtype = m['type'].split('/')[0]
            if mtype=='image':
                images.append(m)
            elif mtype=='video':
                videos.append(m)
        e['images'] = images
        e['has_images'] = not not images
        e['videos'] = videos
        e['has_videos'] = not not videos
    return render_template('index.html', lang=lang, is_rtl=is_rtl, title=title, feed=feed)
 |