첨부파일이 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*.*?<iframe.*?mainFrame.*?(.*)hiddenFrame", 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
감사합니다. 잘되네요 ^^;
답글삭제[-] Error : 'NoneType' object has no attribute 'group'
답글삭제이건 왜그럴까요 ㅠㅠ
네이버 블로그의 뭔가가 바꿘 모양이네요;;...
삭제블로그 환경이 좀 바뀌어 소스를 변경했습니다.
답글삭제이 부분을 타 커뮤니티나 블로그에 배포해도 되는지요?
넵~ 하셔도 됩니다.
삭제감사합니다. ^-^
삭제