역시나 이번에도 귀차니즘의 발동으로 웹으로 클릭질 하면서 백업하기 귀찮아서 자동백업에 사용할 수 있도록 스크립트를 만들어봤습니다.

텍스트큐브 데이터를 백업하기 위해서는 웹으로 로그인이 필요하므로 쉘스크립트는 무리라서 파이썬으로 작성을 했습니다.

따로 설명은 안하겠습니다. 함수의 인자를 보시면 무엇을 넣어야하는지 아실겁니다.

대략적인 작동 방식은 텍스트큐브에 로그인 한 다음 관리자툴의 백업 url을 get으로 요청하여 xml로 된 데이터를 받아서 로컬에 저장해 줍니다.

이 스크립트를 이용하여 예전에 만들었던 trac 백업하기를 응용하면 백업후 자동으로 메일 발송이 가능합니다. :)

아.. 웹서버가 불안정 했는데 데이터 날아갈 걱정이 줄었네요..

#!/usr/bin/python

import httplib, urllib, os, sys

def backupTextCube(host, id, password, blogroot, toSavePath, filename, incAttachment) :

    params = urllib.urlencode({"loginid": id, "password": password})
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/html"}
    conn = httplib.HTTPConnection(host)
    conn.request("POST", blogroot + "/login", params, headers)
    response = conn.getresponse()
    response.read()

    cookies = []
    start = 0   
    end = 0

    items = response.getheader("set-cookie")

    while True :

        start = items.find("TSSESSION", start)
        end = items.find(";", start)

        if start == -1 : break

        extracted = items[start:end]

        if "LOGINID" not in extracted :
            cookies.append(extracted)

        start = end

    params = urllib.urlencode({})
    headers = {"Cookie": ";".join(cookies[1:])}
    conn.request("GET", blogroot + "/owner/data/export?includeFileContents=" + str(incAttachment).lower(), params, headers)
    response = conn.getresponse()   

    result = False   

    if response.status == 200 :        

        if not os.path.exists(toSavePath) and toSavePath != "." :
            os.mkdir(toSavePath)

        file = open(toSavePath + "/" + filename, "wb+")
       
        while True :
            readed = response.read(4098)
           
            if readed == "" : break
           
            file.write(readed)
           
        file.close()               

        result = True                
       
    else :
        result = False
   
    conn.close()

    return result

if __name__ == "__main__" :
    backupTextCube("www.dcple.com", "a@a.com", "1234", "/blog", ".", "blogbackup.xml", True)

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/12/11 19:09 2008/12/11 19:09

트랙백 주소 :: http://dcple.com/blog/trackback/559

댓글을 달아 주세요

  1. ㅋ 대단한데 이틀만에 파이썬 배우면서 만들다니~

[로그인][오픈아이디란?]