최근 카카오와 관련된 모든 서비스가 먹통됨에 따라 티스토리 블로그 역시 한동안 먹통이된 경험을 했다. 티스토리가 먹통이 되자마자 내가 그동안 작성해 놓았던 글들을 복구할 수 없을지도 모른다는 걱정이 앞섰다. 다행이 데이터에는 아무런 이상이 없었지만, 블로그 서비스에 대한 믿음이 사라졌다. 그에 따라 "차라리 github.io로 하나 만들어서 내가 관리하고 말지" 라는 생각이 들어 블로그를 옮기고자 한다.
가장 먼저 티스토리에서 제공하는 기능으로 백업을 진행하고 데이터를 다운로드 했다. 그랬더니 아래와 같은 형태로 백업이 진행되었다.
위 디렉터리 하나가 글 하나다. 하나의 글은 다음과 같이 하나의 HTML 파일과 이미지가 있을 경우 이미지 디렉터리로 구성되있다.
이 자료들을 나의 새로운 블로그에서 지장없이 보기 위해선 다음과 같은 작업들이 필요했다.
1. 백업한 HTML 파일에서 날짜, 제목, 해쉬태그를 추출한다.
2. 추출한 날짜, 제목으로 HTML파일 제목을 만든다.
3. 추출한 해쉬태그를 알맞은 형식으로 파싱한다.
4. HTML 파일에서 날짜, 제목, 해쉬태그 관련 부분을 지운다
5. HTML파일의 <img> 태그의 src 속성을 알맞은 경로로 수정해 주어야 한다.
6. 수정한 HTML 파일을 컨벤션에 맞는 이름으로 저장한다.
5. img 디렉터리 이름을 중복이 없게 수정해야 한다.
단순이 글 한두개면 그냥 수동으로 하고 말겠지만, 글이 약 300개가 되기 때문에 자동화 하기로 했다. 노드로 위 과정을 자동화한 코드는 대략 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
const jsdom = require('jsdom');
const {DataParser, getRequiredDataFromDocument} = require("./DataParser");
const {removeUselessElements, DocumentParser} = require("./DocumentParser");
const {createMetaData, exportPosting, getHtmlAsString, copyImages} = require("./fileio");
const {JSDOM} = jsdom;
for (let directoryName = 1; directoryName <= 335; directoryName++) {
getHtmlAsString(directoryName).then(data => {
const document = (new JSDOM(data)).window.document;
const {title, tags, date} = getRequiredDataFromDocument(document);
const metaData = createMetaData(title, tags);
const encodedTitle = Buffer.from(title, "utf8").toString('base64');
DocumentParser.changeImageSrc(document, encodedTitle);
removeUselessElements(document);
const posting = DataParser.combineMetaDataAndMainContext(metaData, DocumentParser.getWholeFileAsString(document));
exportPosting(posting, `${date}-${title}`);
copyImages(directoryName, encodedTitle);
})
.catch(() => {});
}
|
cs |
더 자세한 코드가 궁금하다면 링크를 참고하자.
이제부터는 새로운 블로그에 글을 쓸 계획이다. 새로운 블로그 주소는 skullkim-dev.com 이다.