def _download(self, cookie_file, url, filename, save_loc, add_to_lib): dfilename = '' if not url: raise Exception(_('No file specified to download.')) if not save_loc and not add_to_lib: # Nothing to do. return dfilename if not filename: filename = get_download_filename(url, cookie_file) filename, ext = os.path.splitext(filename) filename = filename[:60] + ext filename = ascii_filename(filename) br = browser() if cookie_file: cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) with closing(br.open(url)) as r: temp_path = os.path.join(PersistentTemporaryDirectory(), filename) tf = open(temp_path, 'w+b') tf.write(r.read()) dfilename = tf.name return dfilename
def get_download_filename(url, cookie_file=None): ''' Get a local filename for a URL using the content disposition header Returns empty string if an error occurs. ''' from calibre import browser from contextlib import closing filename = '' br = browser() if cookie_file: from mechanize import MozillaCookieJar cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) try: with closing(br.open(url)) as r: filename = get_download_filename_from_response(r) except: import traceback traceback.print_exc() return filename
def _download(self, cookie_file, url, filename, save_loc, add_to_lib): dfilename = "" if not url: raise Exception(_("No file specified to download.")) if not save_loc and not add_to_lib: # Nothing to do. return dfilename if not filename: filename = get_download_filename(url, cookie_file) filename, ext = os.path.splitext(filename) filename = filename[:60] + ext filename = ascii_filename(filename) br = browser() if cookie_file: cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) with closing(br.open(url)) as r: temp_path = os.path.join(PersistentTemporaryDirectory(), filename) tf = open(temp_path, "w+b") tf.write(r.read()) dfilename = tf.name return dfilename
def get_download_filename(url, cookie_file=None): ''' Get a local filename for a URL using the content disposition header Returns empty string if no content disposition header present ''' from contextlib import closing from urllib2 import unquote as urllib2_unquote filename = '' br = browser() if cookie_file: from mechanize import MozillaCookieJar cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) last_part_name = '' try: with closing(br.open(url)) as r: last_part_name = r.geturl().split('/')[-1] disposition = r.info().get('Content-disposition', '') for p in disposition.split(';'): if 'filename' in p: if '*=' in disposition: parts = disposition.split('*=')[-1] filename = parts.split('\'')[-1] else: filename = disposition.split('=')[-1] if filename[0] in ('\'', '"'): filename = filename[1:] if filename[-1] in ('\'', '"'): filename = filename[:-1] filename = urllib2_unquote(filename) break except: import traceback traceback.print_exc() if not filename: filename = last_part_name return filename
def download_file(url, cookie_file=None, filename=None, create_browser=None): if url.startswith('//'): url = 'http:' + url try: br = browser() if create_browser is None else create_browser() except NotImplementedError: br = browser() if cookie_file: cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) with closing(br.open(url)) as r: if not filename: filename = get_download_filename(r) temp_path = os.path.join(PersistentTemporaryDirectory(), filename) with open(temp_path, 'w+b') as tf: shutil.copyfileobj(r, tf) dfilename = tf.name return dfilename
def download_file(url, cookie_file=None, filename=None): user_agent = None if url.startswith('//'): url = 'http:' + url if url.startswith('http://www.gutenberg.org'): # Project Gutenberg returns an HTML page if the user agent is a normal # browser user agent user_agent = '%s/%s' % (__appname__, __version__) br = browser(user_agent=user_agent) if cookie_file: cj = MozillaCookieJar() cj.load(cookie_file) br.set_cookiejar(cj) with closing(br.open(url)) as r: if not filename: filename = get_download_filename(r) temp_path = os.path.join(PersistentTemporaryDirectory(), filename) with open(temp_path, 'w+b') as tf: shutil.copyfileobj(r, tf) dfilename = tf.name return dfilename