티스토리는 마크다운을 이용하여 글 작성을 지원한다. 마크다운을 이용하여 글 작성하는 것을 좋아하는 입장으로 매우 반가운 소식이었다.
새로 글쓰기를 하면 마크다운모드로 티스토리에서 작성을 진행하면 되지만 이미 마크다운으로 작성된 글이라면 글들은 복붙하여 옮기면 되지만 이미지는 티스토리에 옮기기 귀찮다. 각각의 이미지 위치에 이미지를 골라서 하나하나 삽입해줘야한다. 이미지가 5개 이하이면 그냥 손으로 노가다를 하는게 좋지만, 이미지가 많다면....
이렇게 반복적이고 패턴화가 가능한 작업들은 역시 컴퓨터(python)에게 시켜야 맛이다. 마크다운에서 작성한 글에 포함된 이미지를 python을 이용하여 티스토리 tag형식으로 한방에 치환해보자
Markdown -> Tistory
마크다운으로 저장된 글을 티스토리로 옮기는 방법은 크게 2가지다.
티스토리에서 마크다운모드로 변경하여, 마크다운 문법을 전부 복사하여 붙여넣기 하는 방법
티스토리에서 HTML모드로 변경하여, 마크다운 서식이 적용된 글을 HTML형식으로 내보기하여 붙여넣기 하는 방법
(1)번 방법이 옮기기 더 간편하고 나중에 수정하기도 좋기 때문에 이 글에서는 (1)번 방법으로 옮기는 방법을 설명한다.
선행 요소
선행요소가 존재하기 때문에 이미지가 대충 5개 이하라면 손(노가다)으로 하는게 빠르지 않을까라는 생각을 해본다.
티스토리에서 이미지tag? 얻기
글쓰기를 클릭 후(기본모드에서!!!!) 마크다운에 삽입(사용)된 이미지를 티스토리에 모두 삽입한다. 아래 캡쳐에서는 NAS설정 화면을 예시로 넣어봤다. (기본모드에서!!!!)
Tip. 상대주소에 이미지 자동 저장 시키기 (Typora)
이런 상황에 대비한 것은 아니지만 markdown작성에 사용하는 Typora는 이미지를 상대주소로 자동 저장되도록 설정이 가능하다. 아래 그림과 같이 typora를 설정하면 작성 중간중간 이미지를 복붙(ctrl + c, v)하는 경우 md가 위치한 경로 하위에 fig폴더를 만들고 이미지를 넘버링하여 저장한다.
ex) 마크다운경로: E:/Tistory/Default_on.md => 이미지 저장 경로: E:/Tistory/fig/img-2929192938.png
아래 그림은 typora에서 상대주소로 설정하는 챕쳐
이미지를 전부 첨부한 다음 모드를 마크다운모드로 변경하면 아래와 같이 이미지 테그를 얻을 수 있다. 이 tag들을 모두 복사하여 텍스트 파일로 저장해준다. 기본모드에서 첨부하지 않으면 data-filename이 포함된 tag를 얻을 수 없다. tag에 포함된 파일명과 매칭 python으로 이미지 변경을 수행할 것이라 없으면 곤란하다. 이미지를 모두 첨부했으면 다시 기본모드 -> 마크다운모드로 변경한다. 경고창이 하나 발생되는데 쿨하게 무시해준다.
붙여넣기하면 아래와 같이 한줄로 복사되는데 이쁘게 만들겠다고 엔터로 줄구분을 하거나 그러지 않도록 한다. 왜? 코드를 그렇게 작성했으니까여 ㅋㅋㅋ 그냥 한줄로 저장~ (python을 잘 몰라서 exe파일을 사용하시려면 tistory_img.txt로 저장~)
가랏! Python
이제 python만 실행하면 된다. 첨부파일을 다운받거나 아래 코드를 복붙한다. python파일명은 자기 마음대로~~
# python3
import re
import sys
from time import sleep
def get_tistory_img(tistory_img):
# tistory에 첨부한 이미지 파일 형식 읽고, dict[파일이름]: "이미지테그" 형식으로 변환
with open(tistory_img, 'r', encoding='utf-8') as tis_fd:
tis_data = tis_fd.read()
tis_data = tis_data.split(']')
tis_fn_re = re.compile('data-filename="\w+-*\w+[.]\w+"')
tis_tag_tmp = {}
for t in tis_data:
if t == "":
continue
file_name = tis_fn_re.search(t)
file_name = file_name.group()[len('data-filename="'):-1]
tis_tag_tmp[file_name] = t + "]"
return tis_tag_tmp
def get_md_img(md_lines):
# 마크다운에 첨부한 이미지 파일 형식 읽고, dict[파일이름]: "이미지테그" 형식으로 변환
md_img_re = re.compile('!\[(.+)\]\(.+[.]\w+\)')
md_fn_re = re.compile('\]\((.+)\)')
md_img = {}
for li in md_lines:
# line = line.replace("\\", "/")
img = md_img_re.search(li)
if img is not None:
fn = md_fn_re.search(li)
md_img_syn = img.group()
fng = fn.group().replace("\\", "/")
if fng.find('/') == -1:
final_fn = fng[2:-1]
else:
final_fn = fng.split("/")[-1][:-1]
md_img[final_fn] = md_img_syn
return md_img
def replace_img_tag(orinal, ori_tag, new_tag):
# 파일이름에 맞춰 이미지 테그 문자열 치환
mod_data = ""
try:
for count, fn in enumerate(md_tag.keys()):
if not count:
mod_data = orinal
mod_data = mod_data.replace(ori_tag[fn], new_tag[fn])
return mod_data
except KeyError as ke:
print("티스토리에서 올바르게 이미지 tag를 복붙하여 저장하지 않았을 것으로 추정됩니다.")
print("없는 티스토리 tag 파일명 : %s" % ke)
print('[!] 오류... 10초 뒤 종료..')
sleep(10)
sys.exit(0)
if __name__ == '__main__':
py_fn = sys.argv[0].split("/")[-1]
if len(sys.argv) != 3:
print("[!] 사용법: python %s <md파일경로> <티스토리에서 복사한 tag 텍스트파일 경로>" % py_fn)
print("[!] ex) python %s E:/Tistory/svn_설명.md E:/Tistory/snv_설명_tis_img.txt" % py_fn)
print("[!] 또한, 파일명에 띄어쓰기는 사용할 수 없습니다. -나 _를 활용해주세요.")
sys.exit(0)
elif sys.argv[1].find(" ") != -1 or sys.argv[2].find(" ") != -1:
print("[!] 파일명에 띄어쓰기는 사용할 수 없습니다.")
md_dir = sys.argv[1]
tis_img = sys.argv[2]
mod_dir = md_dir.replace(".md", "_mod.md")
with open(md_dir, 'r', encoding='utf-8') as fd:
md_read = fd.read()
line = md_read.split("\n")
md_tag = get_md_img(line)
tis_tag = get_tistory_img(tis_img)
mod = replace_img_tag(md_read, md_tag, tis_tag)
# 변경된 html 파일 쓰기
with open(mod_dir, 'w+', encoding='utf-8') as mod_fd:
mod_fd.write(mod)
print("[*] Done!!")
이제 작성한 md파일과 아까 티스토리에서 복붙하여 저장한 tag파일의 경로만 있으면 된다. 작성자 기준에서 파일 경로는 아래와 같다. 경로에 띄어쓰기(space) 사용하면 오류남. 쓰고싶으면 경로 전체를 "로 감싸주어야 한다.
python이 뭔지도 모르겠고, 설치할 줄은 당연히 모르겠고.. 하시는 분들을 위해서 exe파일을 만들었습니다.(아.. windows가 아니라 MAC OS이시라고요? 그럼.... python설치를...ㅠㅠㅠ) 당연히 생각했어야 했는데 제가 생각이 짧았습니다 ㅋㅋ 해당 exe는 파이썬 따위 모르셔도 되고 파이썬이 설치되어 있지 않아도 실행이 가능합니다. 해당 exe파일은 위에 있는 python코드를 바탕으로 만들어졌으며, 편의를 위해서 일부 변경하였습니다. 그렇기 때문에 오류는 발생할 수 있을지도 모르지만? 악성행위는 당연히 없습니다.(변경된 코드는 해당 포스트 아래에 있습니다.) 능력자 분들은 까보셔도 되고요 불안하시면 다운받지말고 실행하지 말아주세요..ㅜㅜ
다운받은 exe실행법은 아래와 같습니다. 여유가 있으면 간단한 GUI 추가해서 올리고 싶은데 오늘 검색하다지나가던사람 이 분 외에는 아무도 사용하지 않을 것 같아.. 사용법만 아래에 첨부합니다.
원본 파일(예시에서는 IPTime Nas2 duo SVN 활용.md)의 이름을 original.md로 변경합니다. (복사본을 만들어서 변경하셔도 됩니다.)
티스토리에서 복사한 tag 텍스트파일 이름을 tistory_img.txt로 변경합니다.
다운받은 tistory_md_img.exe를 original.md와 tistory_img.txt가 있는 동일한 폴더에 복사합니다. 결국 original.md, tistory_img.txt 와 tistory_md_img.exe는 아래 그림처럼 모두 한 폴더에 있어야 합니다. 파일명이 다르면 안되요~ (대소문자도 구분되요..)
댓글