update version 1.0

This commit is contained in:
Hodza Alban 2017-08-09 14:55:08 +02:00 committed by GitHub
parent 68d809f54e
commit 5a6ebb8eaf

View File

@ -1,18 +1,80 @@
import re
import os
from glob import glob
from glob import glob, escape
from subprocess import Popen, PIPE
from time import strftime, strptime
from time import strftime, strptime, sleep
from contextlib import contextmanager
from telegram import InlineKeyboardButton
# many of these imports serve the commented code...
# this is the hard-split version (files need to be concatenated...)
def check_dimension(f):
""" If f is larger than 50MB it divides it into files up to 45MB """
if os.path.getsize(f) > 50 * 1024 * 1023:
os.system('split -b 49MB "{0}" "{1}"'.format(f, f))
class Video:
def __init__(self, link, chat_id):
self.link = link
self.chat_id = chat_id
self.formats = self.get_formats()
self.keyboard = self.generate_keyboard()
self.file_name = None
def get_formats(self, link=None):
formats = []
cmd = "youtube-dl -F {}".format(self.link)
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
it = iter(str(p[0], 'utf-8').split('\n')) # iterator of output lines
while "code extension" not in next(it): pass # Remove garbage lines
while True:
try:
line = next(it)
if not line:
raise StopIteration # Usually the last line is empty
if "video only" in line:
continue # I don't need video without audio
except StopIteration:
break
else:
format_code, extension, resolution, *_ = line.strip().split()
formats.append([format_code, extension, resolution])
return formats
def generate_keyboard(self):
""" Generate a list of InlineKeyboardButton of resolutions """
kb = []
for code, extension, resolution in self.formats:
kb.append([InlineKeyboardButton("{0}, {1}".format(extension, resolution),
callback_data=code)])
return kb
def download(self, resolution_code):
cmd = "youtube-dl -f {0} {1}".format(resolution_code, self.link)
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
for line in str(p[0], 'utf-8').split('\n'):
if "[download] Destination:" in line:
self.file_name = line[24:] # name of the file
def check_dimension(self):
if os.path.getsize(self.file_name) > 50 * 1024 * 1023:
os.system('split -b 49M "{0}" "{1}"'.format(self.file_name, self.file_name))
os.remove(self.file_name)
return glob(escape(self.file_name) + '*')
@contextmanager
def send(self):
files = self.check_dimension() # split if size >= 50MB
yield files
for f in files: #removing old files
os.remove(f)
#__________________________OLD STUFFS, TOUCH CAREFULLY__________________________
# this is the soft-split version, require avconv, but the audio isn't synchronized, avconv's problems :(
'''
def get_duration(filepath): # get duration in seconds