얼마 전, 네이버 블로그 첨부파일을 다운로드 받는 파이썬 코드를 작성했는데요...

자매품으로(?) 티스토리 첨부파일을 받는 코드도 만들어봤습니다. ^^;;;;

Win95/98 용 고전 게임들 찾다보면 첨부파일이 어마어마하게 많은 경우가 있는데...

하나하나 클릭하기 귀찮아서 코딩까지 하게 되었네요~ ^^;;;;


네이버 블로그는 첨부파일 정보가 있는 페이지까지 접근하기가 좀 귀찮을뿐(?)

그 페이지까지 접근만 하면 첨부파일 다운로드는 비교적 쉽게(?) 해결이 됩니다.

"aPostFiles" 라는 자바스크립트 배열이 있고 그 안에 모든 첨부파일의 정보(링크, 파일이름, 크기 등...)가

가지런히 담겨져 있기에 해당 배열의 내용만 잘 가져오면 되거든요 :)


티스토리는 처음에 접근하는 페이지에 첨부파일 정보가 바로 있어서~

첨부파일 정보를 확인하는 건 어렵지 않습니다.

그런데 네이버 블로그처럼 첨부파일 정보가 한 곳에 몰려있는게 아니라...

<a href="첨부파일 링크"> .... 파일이름</a>
형태로 포스팅 내용 전역에 걸쳐서 포함될 수 있기에 이걸 처리하는게 좀 귀찮습니다. -_-;;;

( 전 그냥 페이지 전체 소스에서 '첨부파일 링크' 를 포함한 태그를 모조리 찾는 방법으로 해결을.. -_-;;;; )


[ GitHub - https://github.com/XeroNicHS/GMF ]

# GMF [File Downloader] for Tistory Blog

import re
import sys
from http import client
from urllib import request


def print_logo():
    print("#------------------------------------------#")
    print("# [GMF] Give Me a File!! [File Downloader] #")
    print("#------------------------------------------#")
    print("# for Tistory Blog\n")


def get_url_source(url):
    try:
        f = request.urlopen(url)
        url_info = f.info()
        url_charset = client.HTTPMessage.get_charsets(url_info)[0]
        url_source = f.read().decode(url_charset)

        return url_source

    except Exception as e:
        print("[-] Error : %s" % e)
        sys.exit(-1)


def main():
    print_logo()

    if len(sys.argv) != 2:
        print("[*] Usage : gmf_ti.py [Tistory Blog URL]")
    else:
        url = sys.argv[1]
        print("[*] Target URL : %s\n" % url)
        url_source = get_url_source(url)

        # find 's1.daumcdn.net/cfs.tistory'
        if url_source.find("t1.daumcdn.net/tistory") == -1:
            print("[-] It is not a Tistory Blog")
            sys.exit(0)

        try:
            # find all 'attach file link'
            p_attach = re.compile(r"href=[\'\"](\S+?/attachment/.*?)[\'\"]\s*.*?/> (.*?)</", re.IGNORECASE | re.DOTALL)
            result = p_attach.findall(url_source)

            if result:
                for each_file in result:
                    file_url = each_file[0]
                    if each_file[1] == "":
                        file_name = file_url[file_url.rfind('/') + 1:]
                    else:
                        file_name = each_file[1]
                    print("* File : %s" % file_name)
                    print("  Link : %s" % file_url)
                    request.urlretrieve(file_url, file_name)
                    print("  ==> Done")
            else:
                print("[-] Attached File not found !!")

        except Exception as e:
            print("[-] Error : %s" % e)
            sys.exit(-1)

if __name__ == "__main__":
    sys.exit(main())

gmf_ti.py 실행

티스토리 첨부파일 태그의 모든 형태를 다 확인한게 아니라...

경우에 따라서는 정보를 못가져올 수도 있습니다... @_@;;;;