티스토리 – TTXML 백업 프로그램

tistory2ttxml

티스토리 백업이 막힌 현재, TTXML로 티스토리 백업을 하는 프로그램을 만들었다.

이 프로그램은 GPL에 의거하여 자유롭게 사용할 수 있다.

이 프로그램을 사용하여 나타날 수 있는 모든 결과는 사용한 사람의 책임이다.

파이썬 3.6기준으로 만들었는데, 아마 2.7에서도 작동하긴 할 것이다.

질문은 새로운 블로그인 https://melotopia.net/b 로 하기 바란다.

워드프레스로 옮기는 경우 TTXML importer에서 오류가 나는데, 인코딩 때문에 발생하는 문제이다. Notepad++등의 프로그램에서 EUC-KR로 읽어온 다음, UTF-8로 변환하여 저장을 하면 된다. 아니면 이 프로그램을 직접 고쳐서 인코딩 문제를 해결해도 된다.

일단 제 프로그램은 공개된 글만 자동으로 다운로드 받을 수 있습니다. 비공개글이면 일단 비공개 설정을 공개로 풀어주는 과정이 필요합니다.

그리고 글의 주소 체계가 숫자로 써져야 합니다. 예를 들어, snowall.tistory.com/53 처럼 끝부분에 숫자가 있어야 합니다. 글자가 있는 경우에는 안됩니다. 숫자로 표시되도록 고쳐주든가 해야겠죠.

그 다음, 제 프로그램은 다운로드 받은 내용을 TTXML이라는 형식으로 저장을 시켜줍니다. TTXML은 티스토리에서 백업을 지원하던 시절에 백업을 받으면 주는 파일 형식입니다. 또한, TTXML말고 HTML파일로도 같이 저장이 됩니다.

TTXML을 이용하는 이유는 워드프레스에서 TTXML을 읽어서 워드프레스에 자동으로 올려주는 플러그인이 있기 때문이었고요.

아무튼, 위의 내용을 알고 있는 상태에서 제 프로그램을 실행시키면 되는데요, 프로그램을 실행시키기 전에 고쳐야 할 부분이 있습니다.

33번째 줄의 domainname=”\”melotopia.net/b\”” 에 본인이 사용할 워드프레스 블로그의 주소를 적어야 합니다. 워드프레스를 사용하지 않을 거라면 사용할 블로그의 주소를 적어주시면 될 것 같습니다.

36번째 줄의 while idname<4000: 에서 4000이라는 숫자를 고쳐야 하는데, 이 숫자는 본인이 작성한 글의 전체 갯수보다 큰 숫자이기만 하면 됩니다. 저는 글이 3500개 정도 있어서 4000을 썼습니다.

파이썬 코드의 실행방법은 일단 python.org에서 파이썬을 다운로드 받아서 설치한 후 파이썬 코드를 더블클릭하면 됩니다.

이 때, BeautifulSoup이라는파이썬 패키지를 설치해야 할 겁니다. 아마 커맨드라인에서 pip install beautifulsoup4 을 실행시키면 될 겁니다.

글 번호에 해당하는 글이 없거나 비공개인 경우 오류가 발생하는 것을 고쳤습니다. 걍 try문으로 에러나면 건너뛰게 했습니다.


게시됨

카테고리

작성자

태그:

댓글

“티스토리 – TTXML 백업 프로그램”에 대한 19개의 응답

  1.  아바타
    익명

    안녕하세요. 티스토리에서 공식적으로 지원하는 백업에 댓글이 하나도 포함이 안되기에 ttxml 백업이 가능한 방법을 찾다가 여기까지 오게 되었습니다. 자세한 설명을 덧붙여주신 덕분에 컴맹수준으로 여러 삽질을 하여 작동까지는 시켰는데 결과물이 빈파일이라서요. 이 파일이 현재는 작동이 안되는 것인지, test.xml 파일이 생성이 되는데 열어보면 메타태그만 한 줄이 있네요. 로그상으로는 1,no file 2,no file 3,no file 이라고 찍힙니다. 오래전에 만드신 것이라 작동이 안되는 건가 싶지만 우선은 여쭙습니다.. ^^;; 답변 기다리겠습니다. 감사합니다.

    1. snowall 아바타
      snowall

      혹시 게시물 주소를 숫자 형식으로 하셨나요? snowall.tistory.com/xxx에서 xxx가 숫자형태인 것만 가능합니다.

  2. GNUNIX 아바타

    아래와같이 수정하였습니다만
    xmlfile=open(“littledevil.xml”,”w”)
    xmlfile.write(“”)
    xmlfile.write(“”)
    domainname=”\”gnunix.co.kr/wordpress\””
    logfile=open(“littledevil.txt”,”w”)
    idname=1
    while idname<4000: # Larger than your post number.
    conn=http.client.HTTPConnection(“littledevil.tistory.com”)
    conn.request(“GET”,”/”+str(idname))
    da=conn.getresponse()
    if da.status==200:
    htmlfile=open(str(idname)+”.html”,”wb”)
    htmlfile.write(da.read())
    htmlfile.close()
    conn.close()
    try:
    로그에는 no file 로만 나오고 있습니다.

    혹시 제가 무엇을 잘못 작성했는지요?

    1. snowall 아바타
      snowall

      프로그램 코드가 들어가 있어서 스팸통에 들어가 있다보니 이제 확인했습니다.
      실제로 해당 페이지가 없는 것 아닐까요? 안될 이유는 없어보이는데요…. 정확히는 모르겠습니다.

  3. goldenbug 아바타

    안녕하세요? 잘 지내시는지요?
    혹시 ttxml 파일 속 내용을 꺼낼 수 있는 프로그램을 만들 수 있을까요? 블로그를 옮기는 중인데, 예전에 백업했던 파일을 갖고 있는데도 여의치 않네요. ^^;

    1. snowall 아바타
      snowall

      네 잘 지내…는 것 같진 않지만요…
      TTXML 형식은 XML이니까 원론적으로 말하자면 그런 프로그램을 만드는게 가능하죠.
      https://gigglehd.com/gg/soft/287570
      이 기사에 나온 프로그램을 이용해서 TTXML을 json으로 옮기고, 다시 워드프레스(설치형)에 업로드 하면 원하는 부분을 찾을 수 있을 것 같네요. 워드프레스(설치형)은 테스트용으로 적당히 설치해서 써야지 될 것 같고요.
      블로그 완성되면 알려주세요~

      1. goldenbug 아바타

        블로그는 워드프레스닷컴에 있는데, 지금은 교정보는데 시간이 오래 걸려서 옮기는 시간도 오래 걸리네요. 예전에 처음 글 쓸 때만큼 시간이 걸리네요.ㅎㅎㅎ
        notion.blog

  4. 김숙희 아바타
    김숙희

    안되는것 같아요.ㅠ.ㅠ 하루종일 이걸로 씨름했는데 왜 안될까요? 더블클릭했는데 까만화면만 계속 깜빡거리고 한번은 빈문서만 저장되었어요. 근데 beebop.tistory.com 부분은 제가 백업하고자 하는 티스토리 주소를 쓰는것인가요? 제 블로그는 개인도메인이 얹어져있는데 그럼 그부분을 제가 티스토리에 얹어있는 도메인을 쓰면 되는건가요?

    1. snowall 아바타
      snowall

      네 맞습니다. beebop.tistory.com 부분을 원하는대로 고치면 됩니다. 개인도메인이면 개인도메인 그대로 쓰면 되고요. (웹브라우저 주소창에 쓰는 주소 그대로)

      상황을 좀 더 자세히 알려주시면 오류를 고치는데 도움이 될 것 같습니다.

  5. 겨울 아바타
    겨울

    안녕하세요 저도 질문 드립니다.
    저는 왜인지 처음부터 에러가 나네요 ㅠ

    ModuleNotFoundError: No module named ‘bs4’
    이렇게 에러가 떠서 혹시 마지막에 말씀하신 beautifulsoup 패키지 미설치 때문인가 싶었는데.

    커멘드 창에 pip intall beautifulsoup 이라고 치면 마찬가지로
    Syntax Error : invalid syntax 라고 뜹니다.
    혹시 어떻게 고쳐야 할까요..?

    1. snowall 아바타
      snowall

      pip install beautifulsoup4 라고 쓰세요.
      https://twpower.github.io/84-how-to-use-beautiful-soup

  6. 구독자 아바타
    구독자

    line 53, in 가 빠졌네요.

    1. 진환 아바타
      진환

      어디에 in이 빠진거에요?

    2. 겨울 아바타
      겨울

      저도 아래와 같은 에러가 나는데..
      xmlfile.write(“”+so(‘div’,{‘class’:’author’})[0](‘span’,{‘class’:’txt’})[0].string.replace(” “,””).replace(“\n”,””)+””)
      IndexError: list index out of range

      in이 어디에 빠진걸까요..?

      1. snowall 아바타
        snowall

        일단 그 문제는 에러가 안나게 고치긴 했습니다.

  7. 구독자 아바타
    구독자

    저도 우연히 차장보다가 들어왔는데 에러가 납니다. 주소를 바꾸고 했는데
    xmlfile.write(“”+so(‘div’,{‘class’:’author’})[0](‘span’,{‘class’:’txt’})[0].string.replace(” “,””).replace(“\n”,””)+””)
    indexerror: list index out of range
    에러가 뜨네요.. 어떻게 방법이 없을까요?

    1. snowall 아바타
      snowall

      늦은 것 같지만 아무튼 일단 고쳤습니다. 삭제되거나 비공개글인 경우 오류가 나는 것이었네요. 비공개글까지 백업하고 싶으면 비공개를 공개로 바꾼 후에 사용하세요.

  8. 에러 아바타
    에러

    에러가 납니다.

    1. snowall 아바타
      snowall

      무슨 에러인지 말씀을 안 해주시면 열심히 해보시라는 말 밖에는 드릴 수가 없습니다…

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.