크롬 브라우저의 백준허브를 이용하면 프로그래머스와 백준에서 푼 코딩테스트 연습문제들을 깃허브에 자동으로 커밋&푸시 해주는데, 이 결과를 이용해 아래처럼 블로그에도 자동으로 포스트를 생성할 수 있게 코드를 짜보았다.

1. 로컬저장소에 알고리즘 깃 저장소 불러오기

git clone {자신의 코테 저장소 깃허브 주소} 
# ex. git clone https://github.com/ddangchani/Algorithm
git pull

2. 디렉토리 변수 설정

import os
from datetime import datetime

blog_dir = '/Users/dangchan/Desktop/ddangchani.github.io' # 깃블로그 디렉토리
target_dir = '/Users/dangchan/Desktop/Github/Algorithm/프로그래머스' # 알고리즘 문제 디렉토리 : 프로그래머스

questions = []

for root, dirs, files in os.walk(target_dir):
    # check .py file in files
    for file in files:
        if file.endswith(".py"):
            # save root at questions
            questions.append(root)

blog_dirtarget_dir...은 자신의 로컬 환경에 맞게 수정하면 된다. question 리스트는 코딩테스트 풀이가 저장된 로컬 저장소에서 문제별 폴더 경로를 저장한다.

3. 포스트 만들기

for q_dir in questions:
    ls_file = os.listdir(q_dir)
    md_file = 'README.md'
    py_file = [f for f in ls_file if f.endswith('.py')][0]

    # create date
    date = os.path.getctime(q_dir + '/' + py_file)
    date = datetime.fromtimestamp(date).strftime('%Y-%m-%d')
    
    # title
    title = q_dir.replace('\u2005', ' ')
    title = title.split('/')[-1]
    question_number = title.split('.')[0] # 문제 번호
    filename = f'{date}-프로그래머스-{question_number}.md' # 저장할 파일 이름

    # 이미 포스팅되었으면 넘어가기
    if filename in os.listdir(blog_dir + '/_posts'):
        continue

    # YAML
    header = ['---\n',
 f'title: (프로그래머스) {title} \n',
 'tags:\n',
 '- Algorithm\n',
 '- Coding Test\n',
 "category: ''\n",
 'use_math: true\n',
 'header: \n',
 ' teaser: /assets/logos/teaser_coding.jpg\n',
 '---\n']
    
    # read md file
    with open(q_dir + '/' + md_file, 'r') as f:
        lines = f.readlines()

    # read py file
    with open(q_dir + '/' + py_file, 'r') as f:
        py_lines = f.readlines()
    py_lines[-1] = py_lines[-1] + '\n'
    
    lines = header + lines + ['\n','\n','```python\n'] + py_lines + ['\n','```\n']

    # image size adjust
    for i, line in enumerate(lines):
        if '<img' in line:
            lines[i] = line.replace('<img', '<img width="50%"')

    # write md file
    with open(blog_dir + '/_posts/' + filename, 'w') as f:
        f.writelines(lines)
    
    print('Create post : ', filename)

header 리스트는 지킬 블로그 게시글의 YAML 헤더를 설정한 것인데, 태그와 티저 이미지는 자신의 블로그 형태에 맞게 설정하면 된다. 위 코드를 실행하면, 앞서 저장된 questions 리스트에 있는 각 문제 폴더들에 대해 자동으로 포스트가 생성되며, 예시 결과는 다음 게시글과 같다.

비교적 편하게 글을 자동으로 생성하고, 추가로 생성된 마크다운을 수정해 자신이 원하는 코멘트를 남길 수 있어서 유용하게 사용할 수 있을 것 같다.

(백준문제는 아직 백준허브 사용 이후 풀지 않아서 추가로 코드 수정을 해 첨부하도록 할 예정)

Leave a comment