adding a podcast mode
This commit is contained in:
parent
d2c9fd6cba
commit
d1bb14fab0
30
octomode.py
30
octomode.py
@ -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'}
|
||||
|
||||
# //////////////////
|
||||
|
||||
|
@ -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>`;
|
||||
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user