역시나 이번에도 귀차니즘의 발동으로 웹으로 클릭질 하면서 백업하기 귀찮아서 자동백업에 사용할 수 있도록 스크립트를 만들어봤습니다.
텍스트큐브 데이터를 백업하기 위해서는 웹으로 로그인이 필요하므로 쉘스크립트는 무리라서 파이썬으로 작성을 했습니다.
따로 설명은 안하겠습니다. 함수의 인자를 보시면 무엇을 넣어야하는지 아실겁니다.
대략적인 작동 방식은 텍스트큐브에 로그인 한 다음 관리자툴의 백업 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
backupTextCube("www.dcple.com", "a@a.com", "1234", "/blog", ".", "blogbackup.xml", True)
 ( 0)  ( 0) |
댓글을 달아 주세요