From d48175938a184375ea645879da48bdc3dac448a9 Mon Sep 17 00:00:00 2001 From: alifeee Date: Fri, 17 Jan 2025 17:31:49 +0100 Subject: [PATCH] add "how to blog" blog post --- feed.xml | 8 ++++++++ images/hat.png | Bin 0 -> 15235 bytes index.html | 22 ++++++++++++++++++++++ utilities.py/post_parser.py | 18 +++++++++--------- 4 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 images/hat.png diff --git a/feed.xml b/feed.xml index 0eb3b5d..a4a8442 100644 --- a/feed.xml +++ b/feed.xml @@ -59,6 +59,14 @@ What did people make and what did I learn? + + How to create a blog (gist) + + https://blog.alifeee.co.uk//https://gist.github.com/alifeee/c857bfb45bfd260a9b9dd9c45e4f7478 + 2024-01-17T00:00:00+00:00 + How to create a blog (gist) + + Making my own Font - BogFace diff --git a/images/hat.png b/images/hat.png new file mode 100644 index 0000000000000000000000000000000000000000..56b045967d14b971996549ca557cf8d3a01adbd5 GIT binary patch literal 15235 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 NYv@0zS9>1uzW_4BzZ?Jn literal 0 HcmV?d00001 diff --git a/index.html b/index.html index b10b9ae..feb9fc4 100644 --- a/index.html +++ b/index.html @@ -362,6 +362,28 @@

I ran a computer font-making workshop!

+
  • + +
    + picture of a hat +
    +
    +

    How to create a blog (gist)

    +

    + +

    +
      +
      +
      +
    • diff --git a/utilities.py/post_parser.py b/utilities.py/post_parser.py index 01c9393..d5885b6 100644 --- a/utilities.py/post_parser.py +++ b/utilities.py/post_parser.py @@ -67,10 +67,14 @@ def get_all_posts() -> List[Post]: date = date.replace(tzinfo=ZoneInfo("Etc/UTC")) index_path = f"{relative_url}/index.html" - with open(index_path, "r", encoding="utf-8") as file: - post_soup = BeautifulSoup(file, "html.parser") - title = post_soup.find("meta", property="og:title")["content"] - description = post_soup.find("meta", property="og:description")["content"] + if os.path.exists(index_path): + with open(index_path, "r", encoding="utf-8") as file: + post_soup = BeautifulSoup(file, "html.parser") + title = post_soup.find("meta", property="og:title")["content"] + description = post_soup.find("meta", property="og:description")["content"] + else: + title = post.find("h2").get_text() + description = title posts.append( Post( @@ -85,13 +89,9 @@ def get_all_posts() -> List[Post]: # make sure all relative_url's exist for post in posts: - assert os.path.exists( + assert post.relative_url.startswith("https") or os.path.exists( post.relative_url ), f"post {post.relative_url} does not exist" - # make sure all md_url's exist - for post in posts: - if not os.path.exists(post.md_url): - print(f"warning: post {post.md_url} does not exist") posts.sort(key=lambda x: x.date, reverse=True) return posts