Skip to content

Instantly share code, notes, and snippets.

@kyujin-cho
Last active September 6, 2017 09:47
Show Gist options
  • Save kyujin-cho/aa88500e21487f78dd644fc00c9cfac5 to your computer and use it in GitHub Desktop.
Save kyujin-cho/aa88500e21487f78dd644fc00c9cfac5 to your computer and use it in GitHub Desktop.
Download DC Con
import json
import urllib.parse
import urllib.request
import re
import os
import os.path
import sys
def dl_file(ids):
try:
ci_res = urllib.request.urlopen('http://dccon.dcinside.com')
ci_cookies = str(ci_res.info())
regex =re.compile(r'ci_c=[0-9|a-z]+')
ci_t = regex.findall(ci_cookies)[0]
ci_t = ci_t.replace('ci_c=', '')
infos = []
for id in ids:
icon_req = urllib.request.Request('http://dccon.dcinside.com/index/package_detail')
icon_req_data = {
'ci_t': ci_t,
'package_idx': id
}
icon_req_data = urllib.parse.urlencode(icon_req_data).encode('utf-8')
icon_req.add_header('X-Requested-With', 'XMLHttpRequest')
icon_req.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
icon_req.add_header('Cookie', 'ci_c=' + ci_t)
icon_res = urllib.request.urlopen(icon_req, data=icon_req_data)
icon_data = icon_res.read()
icon_data = json.loads(icon_data)
print('Downloading', icon_data['info']['title'], 'to folder', icon_data['info']['title'], '...')
title = icon_data['info']['package_idx'] + '_' + icon_data['info']['title']
if not os.path.isdir(title):
os.mkdir(title)
else:
infos.append(icon_data['info'])
continue
base_url = 'http://dcimg5.dcinside.com/dccon.php?no='
i = 1
for item in icon_data['detail']:
req = urllib.request.Request(base_url + item['path'])
req.add_header('Referer', 'http://dccon.dcinside.com/hot/1')
res = urllib.request.urlopen(req)
file_dir = title + '/' + item['idx'] + '_' + item['title'] + '.' + item['ext']
print('Downloading', i, '/', len(icon_data['detail']), ':', file_dir)
with open(file_dir, 'wb') as f:
f.write(res.read())
i += 1
infos.append(icon_data['info'])
return infos
except:
return []
# ids = []
# if len(sys.argv) > 1:
# ids = sys.argv[1:]
# elif len(sys.argv) == 1:
# id = input('ID(seperate ID by space): ')
# ids = id.split(' ')
# for id in ids:
# if not id.isdigit():
# exit()
# dl_file(ids)
import flask
import os
import os.path
import zipfile
import shutil
import json
from dc_con import dl_file
app = flask.Flask(__name__)
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
@app.route('/<int:id>')
def download_file(id):
result = dl_file([id])
if not len(result) is 0:
file_name = result[0]['package_idx'] + '_' + result[0]['title']
if not os.path.isfile(file_name):
zipf = zipfile.ZipFile(file_name + '.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir(file_name + '/', zipf)
zipf.close()
return flask.send_file(file_name + '.zip', attachment_filename=result[0]['package_idx'] + '.zip', mimetype='application/octet-stream', as_attachment=True)
else:
return flask.redirect('/')
app.debug = True
app.run('0.0.0.0', threaded=True)
@kyujin-cho
Copy link
Author

  • Finding id of a DC con:
    image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment