Compare commits
12 Commits
67fc816ca3
...
9884edff17
Author | SHA1 | Date | |
---|---|---|---|
9884edff17 | |||
|
454643e5e1 | ||
|
c0ec365561 | ||
|
9034775a48 | ||
|
75e80c5993 | ||
|
b5160555f3 | ||
|
c895b30b74 | ||
|
9f1aea1f5c | ||
|
fa96dfd36d | ||
|
523ec9c937 | ||
5044b2b0e9 | |||
|
7ec2d58f45 |
@ -21,7 +21,8 @@ settings:
|
|||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm ./pages/*.html
|
- rm -f ./pages/*.html
|
||||||
rm ./tags/*/*.html
|
- rm -f ./tags/*/*.html
|
||||||
rm ./webring/*.html
|
- rm -f ./webring/*.html
|
||||||
rmdir ./pages ./tags/* ./tags ./webring
|
- rm -f ./feeds/*.xml
|
||||||
|
- rmdir ./pages ./tags/* ./tags ./webring ./feeds
|
||||||
|
@ -85,3 +85,4 @@ title="Your Microblog Title Here"
|
|||||||
title_tagged = "#{__tagname__} on {__title__}"
|
title_tagged = "#{__tagname__} on {__title__}"
|
||||||
url = "https://yourdomain.tld/microblog/"
|
url = "https://yourdomain.tld/microblog/"
|
||||||
description = "Your description here."
|
description = "Your description here."
|
||||||
|
trailing_punctuation = ".,)!?>];:"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import os, argparse
|
import os, argparse
|
||||||
from tomlkit import loads
|
from tomlkit import loads
|
||||||
from tomlkit import dump
|
from tomlkit import dump
|
||||||
@ -34,7 +33,7 @@ class MicroblogConfig:
|
|||||||
|
|
||||||
def check(self, r, u): # (reference, user)
|
def check(self, r, u): # (reference, user)
|
||||||
for key in r:
|
for key in r:
|
||||||
if key == "latestpages": continue;
|
if key == "latestpages": continue
|
||||||
# post and webring have subtables
|
# post and webring have subtables
|
||||||
# webring.profile
|
# webring.profile
|
||||||
# webring.following
|
# webring.following
|
||||||
|
@ -549,7 +549,11 @@ if __name__ == "__main__":
|
|||||||
updated = []
|
updated = []
|
||||||
updated += writepage(tpl, tl, tc, cfg["page"],
|
updated += writepage(tpl, tl, tc, cfg["page"],
|
||||||
paginate=True if new_posts is None else False)
|
paginate=True if new_posts is None else False)
|
||||||
|
cfg["rss"]["accepted_images"] = cfg["post"]["accepted_images"]
|
||||||
if cfg["rss"]["enabled"]:
|
if cfg["rss"]["enabled"]:
|
||||||
|
# ensure output directory for feeds exists
|
||||||
|
if not os.path.exists("feeds"):
|
||||||
|
os.mkdir("feeds")
|
||||||
feed_filename = "feeds/__index__.xml"
|
feed_filename = "feeds/__index__.xml"
|
||||||
rss.write_feed(
|
rss.write_feed(
|
||||||
p[:cfg["rss"]["limit"]], \
|
p[:cfg["rss"]["limit"]], \
|
||||||
|
56
src/rss.py
56
src/rss.py
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
from microblog import My_Html_Parser
|
from microblog import My_Html_Parser
|
||||||
# from html.parser import HTMLParser
|
# from html.parser import HTMLParser
|
||||||
from html import escape
|
from html import escape
|
||||||
@ -7,12 +6,12 @@ try:
|
|||||||
import feedgenerator
|
import feedgenerator
|
||||||
except ImportError:
|
except ImportError:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
def write_feed(posts, filename, params):
|
def write_feed(posts, filename, params, tagname=None):
|
||||||
pass
|
pass
|
||||||
print("\trss disabled - missing dependency", file=sys.stderr)
|
print("\trss disabled - missing dependency", file=sys.stderr)
|
||||||
print("\tYour microblog still may have been generated.", file=sys.stderr)
|
print("\tYour microblog still may have been generated.", file=sys.stderr)
|
||||||
|
|
||||||
def line2words(lines, limit):
|
def line2words(lines, limit, trailing_punctuation):
|
||||||
output = []
|
output = []
|
||||||
char_count = 0
|
char_count = 0
|
||||||
break_outer_loop = False
|
break_outer_loop = False
|
||||||
@ -22,7 +21,7 @@ def line2words(lines, limit):
|
|||||||
l = len(word)
|
l = len(word)
|
||||||
if limit > 0 and (l + char_count > limit):
|
if limit > 0 and (l + char_count > limit):
|
||||||
break_outer_loop = True
|
break_outer_loop = True
|
||||||
break;
|
break
|
||||||
output.append(word)
|
output.append(word)
|
||||||
char_count += l
|
char_count += l
|
||||||
if break_outer_loop:
|
if break_outer_loop:
|
||||||
@ -30,15 +29,37 @@ def line2words(lines, limit):
|
|||||||
# last char of last word
|
# last char of last word
|
||||||
last_char = output[-1].strip()[-1]
|
last_char = output[-1].strip()[-1]
|
||||||
# print(output[-1], file=sys.stderr)
|
# print(output[-1], file=sys.stderr)
|
||||||
punctuation = [".", ")", ",", "!", "?", ">", ']']
|
if last_char not in trailing_punctuation:
|
||||||
if last_char not in punctuation:
|
|
||||||
output.append("...")
|
output.append("...")
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
def _is_image_token(token: str, extensions):
|
||||||
|
parts = token.rsplit('.', 1)
|
||||||
|
return len(parts) == 2 and parts[1] in extensions
|
||||||
|
|
||||||
# this is similar to the markup function in microblog
|
# this is similar to the markup function in microblog
|
||||||
def enrich_msg(lines, is_atom=True):
|
def enrich_msg(
|
||||||
|
lines,
|
||||||
|
is_atom=True,
|
||||||
|
accepted_images=[],
|
||||||
|
base_url="",
|
||||||
|
trailing_punctuation="",
|
||||||
|
desc_len_limit=-1,
|
||||||
|
):
|
||||||
if not is_atom:
|
if not is_atom:
|
||||||
return string
|
from urllib.parse import urljoin
|
||||||
|
words = line2words(lines, desc_len_limit, trailing_punctuation)
|
||||||
|
for i in range(len(words)):
|
||||||
|
token = words[i]
|
||||||
|
core = token.rstrip(trailing_punctuation)
|
||||||
|
suffix = token[len(core):]
|
||||||
|
if len(core) == 0 or "<" in core or ">" in core:
|
||||||
|
continue
|
||||||
|
if _is_image_token(core, accepted_images):
|
||||||
|
abs_url = urljoin(base_url, core)
|
||||||
|
anchor = f"<a href=\"{escape(abs_url)}\">{escape(abs_url)}</a>"
|
||||||
|
words[i] = anchor + suffix
|
||||||
|
return words
|
||||||
content = []
|
content = []
|
||||||
parser = My_Html_Parser([])
|
parser = My_Html_Parser([])
|
||||||
for line in lines:
|
for line in lines:
|
||||||
@ -66,9 +87,9 @@ def enrich_msg(lines, is_atom=True):
|
|||||||
content.append(line)
|
content.append(line)
|
||||||
return content
|
return content
|
||||||
|
|
||||||
def write_feed(posts, filename, params, tagname=str()):
|
def write_feed(posts, filename, params, tagname=None):
|
||||||
feed = None
|
feed = None
|
||||||
if tagname != str():
|
if tagname:
|
||||||
t = params["title_tagged"].format(
|
t = params["title_tagged"].format(
|
||||||
__tagname__ = tagname,
|
__tagname__ = tagname,
|
||||||
__title__ = params["title"])
|
__title__ = params["title"])
|
||||||
@ -96,12 +117,17 @@ def write_feed(posts, filename, params, tagname=str()):
|
|||||||
# len of post.message is number of lines
|
# len of post.message is number of lines
|
||||||
msg = post.message
|
msg = post.message
|
||||||
ti = " ".join(
|
ti = " ".join(
|
||||||
line2words(msg,TITLE_LEN_LIMIT))
|
line2words(msg, TITLE_LEN_LIMIT, params["trailing_punctuation"]))
|
||||||
if params["use_atom"]:
|
|
||||||
de = " ".join(enrich_msg(msg))
|
|
||||||
else:
|
|
||||||
de = " ".join(
|
de = " ".join(
|
||||||
line2words(msg,DESC_LEN_LIMIT))
|
enrich_msg(
|
||||||
|
msg,
|
||||||
|
is_atom=params["use_atom"],
|
||||||
|
base_url=params["url"],
|
||||||
|
accepted_images=params["accepted_images"],
|
||||||
|
trailing_punctuation=params["trailing_punctuation"],
|
||||||
|
desc_len_limit=DESC_LEN_LIMIT,
|
||||||
|
)
|
||||||
|
)
|
||||||
li = base_url + ("#%i" % post.num)
|
li = base_url + ("#%i" % post.num)
|
||||||
p = dateutil.parser.parse(post.timestamp)
|
p = dateutil.parser.parse(post.timestamp)
|
||||||
if params["use_atom"]:
|
if params["use_atom"]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user