update version 1.0

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

78
main.py
View File

@ -1,93 +1,39 @@
import os
import logging
from glob import glob
from subprocess import Popen, PIPE
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (Updater, CommandHandler, CallbackQueryHandler,
MessageHandler, Filters)
from telegram import InlineKeyboardMarkup
from telegram.ext import Updater, CallbackQueryHandler, MessageHandler, Filters
from vid_utils import check_dimension
from vid_utils import Video
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
#TODO I don't like these global vars...
formats = [] # aviable format of the video
link = '' #link of the video
def generate_keyboard(l):
""" return a keyboard fom list l """
kb = []
for code, extension, resolution in l:
kb.append([InlineKeyboardButton("{0}, {1}".format(extension, resolution),
callback_data=code)])
return kb
video = None
def get_format(bot, update):
global link
link = update.message.text # saving link in global var
formats[:] = [] # remove old formats
logger.info(update.message.text) # "history"
global video
video = Video(update.message.text, update.message.chat_id)
for f in glob('*.mp4*') + glob('*.webm*'): # with glob it is not possible check multiple extension in one regex
os.remove(f) # remove old video(s)
try:
"""
p = subprocess.Popen("youtube-dl -F {}".format(update.message.text), shell=True, stdout=subprocess.PIPE) # this line can be very dangerous, there is a serious command-injection problem
p = p.communicate()
"""
cmd = "youtube-dl -F {}".format(update.message.text) # this line can be very dangerous, there is a serious command-injection problem
p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
p = p.communicate()
it = iter(str(p[0], 'utf-8').split('\n'))
while not "code extension" in next(it): # Remove garbage lines, i need only the formats
pass
while True: # save the formats in the formats list
try:
line = next(it)
if not line: # the last line usually is empty...
raise StopIteration
if "video only" in line: # video without audio... why?
continue
except StopIteration:
break
else:
format_code, extension, resolution, *_ = line.strip().split()
formats.append([format_code, extension, resolution])
except Exception as e:
bot.sendMessage(chat_id=update.message.chat_id, text='Error: {}'.format(e))
logger.info(e)
raise e
else:
reply_markup = InlineKeyboardMarkup(generate_keyboard(formats))
reply_markup = InlineKeyboardMarkup(video.keyboard)
update.message.reply_text('Choose format:', reply_markup=reply_markup)
def download_choosen_format(bot, update):
query = update.callback_query
video.download(query.data)
bot.edit_message_text(text="Downloading...",
chat_id=query.message.chat_id,
message_id=query.message.message_id)
os.system("youtube-dl -f {0} {1}".format(query.data, link))
for f in glob('*.mp4*') + glob('*.webm*'):
check_dimension(f)
break # check first file
for f in glob('*.mp4*') + glob('*.webm*'): # send document(s)
with video.send() as files:
for f in files:
bot.send_document(chat_id=query.message.chat_id, document=open(f, 'rb'))
updater = Updater(token=INSERT_YOUR_TOKEN_HERE)
updater = Updater(token=YOUR_TOKEN)
updater.dispatcher.add_handler(MessageHandler(Filters.text, get_format))
updater.dispatcher.add_handler(CallbackQueryHandler(download_choosen_format))