첨부파일이 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

