def start_download( self, _url, res='720p', default_directory=os.path.join(str(Path.home()) + '/Music/')): """ Main downloader to download files in the current directory. TODO: I can get the download url from the pytube and download it via TODO: urllib2 or something else. May be later. :param _url: str :param res: str :param default_directory: UNIX directory currently :return: bool | success or not """ try: yt = YouTube(str(_url)) yt.register_on_progress_callback(self.on_progress) yt.register_on_complete_callback(self.on_complete) if self.thumbnail_url is None: self.thumbnail_url = yt.thumbnail_url if self.is_audio: stream = yt.streams.filter(only_audio=True).first() if self._filename is None: self._filename = safe_filename( stream.player_config_args['title']) stream.download(filename=self._filename) else: all_streams = yt.streams.filter(file_extension='mp4', progressive=True).all() is_download = False if self._filename is None: self._filename = safe_filename( all_streams[0].player_config_args['title']) for stream in all_streams: if stream.resolution == res: stream.download(filename=self._filename) is_download = True break if not is_download: print( "[[ {} ]] video isn't available on the given resolution: {}" .format(self._filename, res)) return False self.clean_up(default_directory) return True except KeyboardInterrupt as error: print(str(error)) self.remove_errr_file() return False except BaseException as error: print(str(error)) self.remove_errr_file() return False
def make_filename(chat): if len(format) > 4: # Filename already given in format filename = os.path.join(path, format) else: filename = "Skype %s.%s" % (chat["title_long_lc"], format) filename = os.path.join(path, util.safe_filename(filename)) filename = util.unique_path(filename) return filename
def make_filename(chat): if len(format) > 4: # Filename already given in format filename = os.path.join(path, format) else: args = collections.defaultdict(str); args.update(chat) filename = "%s.%s" % (conf.ExportChatTemplate % args, format) filename = os.path.join(path, util.safe_filename(filename)) filename = util.unique_path(filename) return filename
def make_filename(chat): if len(format) > 4: # Filename already given in format filename = os.path.join(path, format) else: args = collections.defaultdict(str) args.update(chat) filename = "%s.%s" % (conf.ExportChatTemplate % args, format) filename = os.path.join(path, util.safe_filename(filename)) filename = util.unique_path(filename) return filename
def run_export(filenames, format): """Exports the specified databases in specified format.""" dbs = [skypedata.SkypeDatabase(f) for f in filenames] is_xlsx_single = ("xlsx_single" == format) for db in dbs: formatargs = collections.defaultdict(str) formatargs["skypename"] = os.path.basename(db.filename) formatargs.update(db.account or {}) basename = util.safe_filename(conf.ExportDbTemplate % formatargs) dbstr = "from %s " % db if len(dbs) != 1 else "" if is_xlsx_single: export_dir = os.getcwd() filename = util.unique_path("%s.xlsx" % basename) else: export_dir = util.unique_path(os.path.join(os.getcwd(), basename)) filename = format target = filename if is_xlsx_single else export_dir try: print("Exporting as %s %sto %s." % (format[:4].upper(), dbstr, target)) chats = sorted(db.get_conversations(), key=lambda x: x["title"].lower()) db.get_conversations_stats(chats) bar_total = sum(c["message_count"] for c in chats) bartext = " Exporting %.*s.." % (30, db.filename) # Enforce width bar = ProgressBar(max=bar_total, afterword=bartext) bar.start() result = export.export_chats(chats, export_dir, filename, db, progress=bar.update) files, count = result bar.stop() if count: bar.afterword = " Exported %s to %s. " % (db, target) bar.update(bar_total) print() log("Exported %s %sto %s as %s.", util.plural("chat", count), dbstr, target, format) else: print("\nNo messages to export%s." % ("" if len(dbs) == 1 else " from %s" % db)) os.unlink(filename) if is_xlsx_single else os.rmdir(export_dir) except Exception as e: print("Error exporting chats: %s\n\n%s" % (e, traceback.format_exc()))
def run_export(filenames, format, chatnames, authornames, ask_password): """Exports the specified databases in specified format.""" dbs = [skypedata.SkypeDatabase(f) for f in filenames] is_xlsx_single = ("xlsx_single" == format) for db in dbs: if (ask_password and db.id and conf.SharedImageAutoDownload and format.lower().endswith("html")): prompt = "Enter Skype password for '%s': " % db.id while not skypedata.SharedImageDownload.has_login(db.id): with warnings.catch_warnings(): warnings.simplefilter("ignore") # possible GetPassWarning output(prompt, end="") # getpass output can raise errors pw = getpass.getpass("", io.BytesIO()) if not pw: continue # while try: skypedata.SharedImageDownload.login(db.id, pw) except Exception as e: log("Error signing in %s on Skype web.\n\n%s", db.id, util.format_exc(e)) prompt = "%s\nEnter Skype password for '%s': " % (e, db.id) formatargs = collections.defaultdict(str) formatargs["skypename"] = os.path.basename(db.filename) formatargs.update(db.account or {}) basename = util.safe_filename(conf.ExportDbTemplate % formatargs) dbstr = "from %s " % db if len(dbs) != 1 else "" if is_xlsx_single: export_dir = os.getcwd() filename = util.unique_path("%s.xlsx" % basename) else: export_dir = util.unique_path(os.path.join(os.getcwd(), basename)) filename = format target = filename if is_xlsx_single else export_dir try: extras = [("", chatnames)] if chatnames else [] extras += [(" with authors", authornames)] if authornames else [] output("Exporting%s%s as %s %sto %s." % (" chats" if extras else "", ",".join("%s like %s" % (x, y) for x, y in extras), format[:4].upper(), dbstr, target)) chats = sorted(db.get_conversations(chatnames, authornames), key=lambda x: x["title"].lower()) db.get_conversations_stats(chats) bar_total = sum(c["message_count"] for c in chats) bartext = " Exporting %.*s.." % (30, db.filename) # Enforce width bar = ProgressBar(max=bar_total, afterword=bartext) bar.start() result = export.export_chats(chats, export_dir, filename, db, progress=bar.update) files, count = result bar.stop() if count: bar.afterword = " Exported %s to %s. " % (db, target) bar.update(bar_total) output() log("Exported %s %sto %s as %s.", util.plural("chat", count), dbstr, target, format) else: output("\nNo messages to export%s." % ("" if len(dbs) == 1 else " from %s" % db)) os.unlink(filename) if is_xlsx_single else os.rmdir(export_dir) except Exception as e: output("Error exporting chats: %s\n\n%s" % (e, traceback.format_exc()))
def run_export(filenames, format, chatnames, authornames, ask_password): """Exports the specified databases in specified format.""" dbs = [skypedata.SkypeDatabase(f) for f in filenames] is_xlsx_single = ("xlsx_single" == format) for db in dbs: if (ask_password and db.id and conf.SharedImageAutoDownload and format.lower().endswith("html")): prompt = "Enter Skype password for '%s': " % db.id while not skypedata.SharedImageDownload.has_login(db.id): with warnings.catch_warnings(): warnings.simplefilter("ignore") # possible GetPassWarning output(prompt, end="") # getpass output can raise errors pw = getpass.getpass("", io.BytesIO()) if not pw: continue # while try: skypedata.SharedImageDownload.login(db.id, pw) except Exception as e: log("Error signing in %s on Skype web.\n\n%s", db.id, util.format_exc(e)) prompt = "%s\nEnter Skype password for '%s': " % (e, db.id) formatargs = collections.defaultdict(str) formatargs["skypename"] = os.path.basename(db.filename) formatargs.update(db.account or {}) basename = util.safe_filename(conf.ExportDbTemplate % formatargs) dbstr = "from %s " % db if len(dbs) != 1 else "" if is_xlsx_single: export_dir = os.getcwd() filename = util.unique_path("%s.xlsx" % basename) else: export_dir = util.unique_path(os.path.join(os.getcwd(), basename)) filename = format target = filename if is_xlsx_single else export_dir try: extras = [("", chatnames)] if chatnames else [] extras += [(" with authors", authornames)] if authornames else [] output("Exporting%s%s as %s %sto %s." % (" chats" if extras else "", ",".join( "%s like %s" % (x, y) for x, y in extras), format[:4].upper(), dbstr, target)) chats = sorted(db.get_conversations(chatnames, authornames), key=lambda x: x["title"].lower()) db.get_conversations_stats(chats) bar_total = sum(c["message_count"] for c in chats) bartext = " Exporting %.*s.." % (30, db.filename) # Enforce width bar = ProgressBar(max=bar_total, afterword=bartext) bar.start() result = export.export_chats(chats, export_dir, filename, db, progress=bar.update) files, count = result bar.stop() if count: bar.afterword = " Exported %s to %s. " % (db, target) bar.update(bar_total) output() log("Exported %s %sto %s as %s.", util.plural("chat", count), dbstr, target, format) else: output("\nNo messages to export%s." % ("" if len(dbs) == 1 else " from %s" % db)) os.unlink(filename) if is_xlsx_single else os.rmdir(export_dir) except Exception as e: output("Error exporting chats: %s\n\n%s" % (e, traceback.format_exc()))