[토이프로젝트] 개인용 정적 사이트를 만들어 보자. 거기에 AI를 곁들인.
- 꼬반
- 2024. 12. 20. 10:47
오블완이 끝나고 살짝 텐션도 떨어졌고..모티베이션도(오블완...ㅂㄷㅂㄷ) 부족한데다.
설상가상 회사에 일은 연말이라 바빠지기 시작했습니다.
덕분에 한동안 포스팅은 또 다시 멀리 멀리...
그러다가 AI를 놀리는 것도 그렇고..(놀지말고 일해라 핫산!)
뭐할까 생각하다가 정적 사이트 생성기를 만들어 보기로 합니다.(? 의식의 흐름 무엇)
그래서 영혼의 동반자 우리의 perplexity에게 아래처럼 질의를 했습니다.
Q. 개인 블로그에서 사용할 정적사이트생성기를 파이썬으로 만들려고 해. 해당 생성기의 기능은 1. 텍스트로 작성한 파일의 내용을 블로그 템플릿의 특정 영역에 입력하여 기존에 존재하는 blog-n.html (n은 숫자) 의 다음 파일로 생성합니다. 2번째는 블로그 리스트 페이지를 업데이트 합니다.
이렇게 중구난방인 질문에도 아래와 같이 훌륭하게 대답하여 줬습니다.
import os
import markdown
from jinja2 import Environment, FileSystemLoader
from datetime import datetime
# 설정
CONTENT_DIR = 'content'
TEMPLATE_DIR = 'templates'
OUTPUT_DIR = 'output'
# Jinja2 환경 설정
env = Environment(loader=FileSystemLoader(TEMPLATE_DIR))
def parse_markdown(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
html = markdown.markdown(content)
return html
def generate_post(file_name, content):
template = env.get_template('post.html')
output = template.render(content=content, title=file_name)
# 다음 번호의 blog-n.html 파일 생성
existing_files = [f for f in os.listdir(OUTPUT_DIR) if f.startswith('blog-') and f.endswith('.html')]
next_number = len(existing_files) + 1
output_file = f'blog-{next_number}.html'
with open(os.path.join(OUTPUT_DIR, output_file), 'w', encoding='utf-8') as f:
f.write(output)
return output_file
def generate_index(posts):
template = env.get_template('index.html')
output = template.render(posts=posts)
with open(os.path.join(OUTPUT_DIR, 'index.html'), 'w', encoding='utf-8') as f:
f.write(output)
def main():
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
posts = []
for file_name in os.listdir(CONTENT_DIR):
if file_name.endswith('.md'):
file_path = os.path.join(CONTENT_DIR, file_name)
content = parse_markdown(file_path)
output_file = generate_post(file_name, content)
posts.append({
'title': file_name[:-3], # .md 확장자 제거
'file': output_file,
'date': datetime.fromtimestamp(os.path.getmtime(file_path))
})
# 날짜순으로 정렬
posts.sort(key=lambda x: x['date'], reverse=True)
generate_index(posts)
if __name__ == '__main__':
main()
아니 앉은 자리에서 뚝딱 만들어주는 AI 역시... 대단합니다.
물론 기본 기능은 매우 잘 동작하나 세세한 부분들의 수정이 필요하여 소스를 조금 손봐서 사용하였더니 훌륭하게
마크 다운 문서를 가지고 정적 블로그 사이트를 잘 만들어줍니다..
티스토리 블로그 로그인하고 글쓰고 하는 것도 귀찮았는데 앞으로는....
아..아닙니다. 같이 잘 써야죠 암암 ㅎ