첨부파일이 2~3개 정도면 별 생각없이 클릭~ 클릭하면서 다운받지만...

7~8개가 넘어가면 귀차니즘 지수가 상승하면서 고민을 하게 됩니다.

' 받을까...? 말까...? '

기분이 좋은 날은 받을 수도 있고... 아닌 날은 그냥 넘어갈 수도 있겠죠... -_-;;;

받아야 될 첨부파일이 20개 이상이면 솔직히(?) 받기 싫어집니다.

네이버 블로그 첨부파일


정말 필요한 것일까...? 다시 한번 고민을 하게 되죠...


며칠 전에 총 50개가 넘는 파일을 일일이 클릭해서 받자니 미칠 것 같아서...

고민 좀 하다가 파이썬으로 뚝딱뚝딱 만들어봤습니다.

일단은 '네이버 블로그' 전용으로~ ^^;;;;


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

# GMF [File Downloader] for NAVER Blog

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


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


def get_url_source(url):
    try:
        while url.find("PostView.nhn") == -1 and url.find("PostList.nhn") == -1:
            f = request.urlopen(url)
            url_info = f.info()
            url_charset = client.HTTPMessage.get_charsets(url_info)[0]
            url_source = f.read().decode(url_charset)

            # find 'NBlogWlwLayout.nhn'
            if url_source.find("NBlogWlwLayout.nhn") == -1:
                print("\n[-] It is not a NAVER Blog")
                sys.exit(0)

            # get frame src
            p_frame = re.compile(r"\s*.*?<frameset.*?>(.*)</frameset>", re.IGNORECASE | re.DOTALL)
            p_src_url = re.compile(r"\s*.*?src=[\'\"](.+?)[\'\"]", re.IGNORECASE | re.DOTALL)
            src_url = p_src_url.match(p_frame.match(url_source).group(1)).group(1)
            url = src_url

        if url.find("http://blog.naver.com") == -1:
            last_url = "http://blog.naver.com" + url
        else:
            last_url = url

        print("   => Last URL : %s\n" % last_url)
        f = request.urlopen(last_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_nb.py [NAVER Blog URL]")
    else:
        url = sys.argv[1]
        print("[*] Target URL : %s" % url)
        url_source = get_url_source(url)

        # find 't.static.blog.naver.net'
        if url_source.find("t.static.blog.naver.net") == -1:
            print("\n[-] It is not a NAVER Blog")
            sys.exit(0)

        try:
            # find 'aPostFiles'
            p_attached_file = re.compile(r"\s*.*aPostFiles\[1\] = \[(.*?)\]", re.IGNORECASE | re.DOTALL)
            result = p_attached_file.match(url_source).group(1)
            if result:
                # convert to JSON style
                data = "[" + result.replace('\'', '\"') + "]"
                json_data = json.loads(data)

                for each_file in json_data:
                    print("* File : %s, Size : %s Bytes" % (each_file["encodedAttachFileName"], each_file["attachFileSize"]))
                    print("  Link : %s" % each_file["encodedAttachFileUrl"])
                    # File Download
                    request.urlretrieve(each_file["encodedAttachFileUrl"], each_file["encodedAttachFileName"])
                    print("  => Done!!\n")
            else:
                print("[-] Attached File not found !!")

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

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


사용법은 간단합니다.

스크립트 파일의 인자로 첨부파일을 받고 싶은 블로그의 주소를 넣어주면 됩니다.

ex) gmf_nb.py http://blog.naver.com/janghs1117/70066915050

gmf_nb.py 실행

일단... 제가 원하는 선에서는 문제없이 동작하는 것 같네요... ^^;;;

파이썬 만세 i(-0-)i