adding a podcast mode

This commit is contained in:
mb 2023-11-30 15:27:23 +01:00
parent d2c9fd6cba
commit d1bb14fab0
3 changed files with 30 additions and 12 deletions

View File

@ -4,6 +4,7 @@ from flask import Flask, request, render_template, render_template_string, redir
from urllib.request import urlopen
from urllib.parse import urlencode, urlparse
import subprocess
from jinja2 import Template
# To sanitize Flask input fields
from markupsafe import Markup, escape
@ -195,7 +196,13 @@ def wildcardtemplate(name):
@APP.route('/<name>/wildcard/')
def wildcard(name):
app_root = get_app_root()
url = f"{ app_root }/{name}/wildcard.raw"
url = url_for("wildcardpage", name=name)
return render_template('iframe.html', url=url, name=name.strip())
@APP.route('/<name>/podcast/')
def podcast(name):
app_root = get_app_root()
url = f"{ app_root }/{ name }/podcast.rss"
return render_template('iframe.html', url=url, name=name.strip())
# //////////////////
@ -243,7 +250,7 @@ def preview(name):
@APP.route('/<name>/pagedjs.html')
def pagedjs(name):
# TO GENERATE THE PAGED.JS WEBPAGE
# TO GENERATE THE PAGED.JS PAGE
md_pad_content = get_pad_content(name, ext='.md')
html = md_to_html(md_pad_content, name)
metadata = get_md_metadata(md_pad_content)
@ -252,28 +259,39 @@ def pagedjs(name):
return render_template('pagedjs.html', name=name.strip(), pad_content=html, lang=lang, title=title)
@APP.route('/<name>/wildcard.raw')
@APP.route('/<name>/wildcard.html')
def wildcardpage(name):
md_pad_content = get_pad_content(name, ext='.md')
wildcard_template_pad_content = get_pad_content(name, ext='.wildcard-template.html')
audio = []
for line in md_pad_content.splitlines():
# if any(ext in line for ext in [".mp3", ".ogg"]):
if ".mp3" in line:
audio.append(line)
elif ".ogg" in line:
audio.append(line)
return render_template_string(wildcard_template_pad_content, name=name.strip(), audio=audio)
@APP.route('/<name>/podcast.rss')
def rss(name):
# parse for audio links
md_pad_content = get_pad_content(name, ext='.md')
audio = []
for line in md_pad_content.splitlines():
# if any(ext in line for ext in [".mp3", ".ogg"]):
if ".mp3" in line:
audio.append(line)
# parse metadata
metadata = get_md_metadata(md_pad_content)
title = metadata['title'][0]
app_url = get_app_hostname() + get_app_root()
octomode_link = app_url + url_for("main", name=name)
rss_link = app_url + url_for("rss", name=name)
# render podcast.rss template
with open("templates/podcast.rss", "r") as t:
template = Template(t.read())
rss = template.render(name=name.strip(), title=title, audio=audio, octomode_link=octomode_link, rss_link=rss_link)
return template_pad_content, 200, {'Content-Type': 'text/plain; charset=utf-8'}
return rss, 200, {'Content-Type': 'text/xml; charset=utf-8'}
# //////////////////

View File

@ -47,6 +47,8 @@ window.addEventListener('load', function () {
<a href="{{ url_for('wildcard', name=name) }}"><button>*</button></a>
<a class="link" href="{{ url_for('wildcardpage', name=name) }}" target="_blank"> 🔗</a>
<a href="{{ url_for('podcast', name=name) }}"><button>podcast</button></a>
<a class="link" href="{{ url_for('rss', name=name) }}" target="_blank"> 🔗</a>
</div>`;

View File

@ -1,18 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{title}}</title>
<link>https://later</link>
<title>{{ title }}</title>
<link>{{ octomode_link }}</link>
<description>Podcast generated etcot.</description>
<lastBuildDate>builtdate..todo</lastBuildDate>
<atom:link href="todo.xml" rel="self" type="application/rss+xml" />
<atom:link href="{{ rss_link }}" rel="self" type="application/rss+xml" />
{% for link in audio %}
<item>
<pubDate>todo</pubDate>
<enclosure url="{{link}}" type="audio/mpeg" />
<enclosure url="{{ link }}" type="audio/mpeg" />
</item>
{% endfor %}
</channel>
</rss>