Перейти к содержанию
Slivator.info

slivator

Рекомендуемые сообщения

Бот для скачивания видео с YouTube — это инновационное приложение для Telegram, способствующее удобному и быстрому доступу к медиаконтенту. Пользователи могут без труда загружать видео с YouTube в формате mp3, наслаждаться аудиофайлами в любое время и в любом месте. Этот бот обеспечивает широкий выбор качества как для видео, так и для аудиофайлов, позволяя каждому пользователю выбрать оптимальное качество согласно своим потребностям и предпочтениям. С его помощью загрузка мультимедийного контента становится удобной и максимально персонализированной.

Установка и запуск:

  1. Установи sudo apt install ffmpeg и pip install pytube
  2. Создайте нового telegram-бота https://telegram.me/BotFather
  3. Выберите имя для своего бота и скопируйте "токен"
  4. Вставьте токен в строку 146 "коде бота", например:
  5. base_url = 'https://api.telegram.org/bot35689568:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0

Запустите скрипт:
python telegram-pytube.py

Использование:
Пользователи могут отправлять боту ссылки на видео с YouTube, а затем выбирать желаемое качество видео или аудио для загрузки.
Бот предоставляет пользователю выбор различных вариантов качества, что обеспечивает гибкость и удобство в использовании.

Заключение:
Этот представляет собой удобный инструмент для пользователей Telegram, которым часто требуется загружать контент с YouTube. Установка и запуск бота достаточно просты, а его функциональность делает процесс загрузки видео и аудио максимально удобным и эффективным.

Бот для скачивания видео с YouTube - отличное дополнение к вашему мессенджеру Telegram, обеспечивая вас возможностью загружать контент прямо из чата. Наслаждайтесь удобством и простотой использования бота!

Код

Python:
import requests
import json
import time
from pytube import YouTube
import re
import os
import subprocess

def read_msg(offset):
    data = {
        "offset": offset,
    }
    resp = requests.get(base_url+'/getUpdates', data=data)
    dataframe = resp.json()

    for i in dataframe["result"]:
        try:
            print(i["message"]["text"])
            yt = YouTube(i["message"]["text"])
            if len(yt.streams) > 0:
                f = open(i["message"]["from"]["username"] + '.txt', 'w')
                f.write(i["message"]["text"])
                f.close()

                keyboard = [[{"text": "Audio"}]]
                keyboard_res = [[{"text": "144p"}], [{"text": "240p"}], [{"text": "360p"}], [{"text": "480p"}], [{"text": "720p"}], [{"text": "1080p"}], [{"text": "1440p"}], [{"text": "2160p"}]]

                for k in range(8):
                    if yt.streams.filter(res=formats[k+1]):
                        keyboard.append(keyboard_res[k])

                send_download(i["message"]["from"]["id"], keyboard)
            else:
                send_message(i["message"]["from"]["id"], 'Can not download this video')

        except:
            try:
                if i["message"]["text"] in formats:
                    f = open(i["message"]["from"]["username"] + '.txt')
                    link = f.readline()
                    f.close()

                    yt = YouTube(link)
                    title = re.sub(r"[^a-zA-Z0-9 ]", "", yt.title)
                    # Бот создан форумом na-sha.ru
                    username = i["message"]["from"]["username"] + '/'

                    try:
                        os.mkdir(username)
                    except:
                        pass
                   
                    # Downloading audio
                    input_audio = username + title + ' - audio'
                    try:
                        audio = yt.streams.filter(abr='128kbps')
                        audio[0].download(filename = input_audio)
                    except:
                        audio = yt.streams.filter(type='audio')
                        audio[0].download(filename = input_audio)

                    if i["message"]["text"] == 'Audio':
                        # Converting audio
                        output_media = username + title + ' - ' + i["message"]["text"] + '.mp3'
                        subprocess.call(["ffmpeg", "-i", input_audio, output_media, "-y"])
                        os.remove(input_audio)
                        size = round(os.path.getsize(output_media) / 1024 / 1024, 2)

                        if size > 50:
                            send_message(i["message"]["from"]["id"], 'Done! ' + str(size) + 'MB')
                        else:
                            send_audio(i["message"]["from"]["id"], output_media)

                    else:
                        # Downloading video and merging
                        input_video = username + title + ' - video'
                        video = yt.streams.filter(res=i["message"]["text"])
                        video[0].download(filename = input_video)

                        output_media = username + title + ' - ' + i["message"]["text"] + '.mp4'
                        subprocess.call(["ffmpeg", "-i", input_video, "-i", input_audio, "-c", "copy", output_media, "-y"])
                        os.remove(input_video)
                        os.remove(input_audio)
                        size = round(os.path.getsize(output_media) / 1024 / 1024, 2)

                        if size > 50:
                            send_message(i["message"]["from"]["id"], 'Done! ' + str(size) + 'MB')
                        else:
                            send_video(i["message"]["from"]["id"], output_media)

            except:
                pass

    if dataframe["result"]:
        return dataframe["result"][-1]["update_id"] + 1
 
def send_download(user, keyboard):
    base_url_download = base_url + '/sendMessage'
    headers = {"Content-Type": "application/json"}
    data = {
        "chat_id": user,
        "text": "Select option",
        # Бот создан форумом na-sha.ru
        "reply_markup": {
            "keyboard": keyboard,
            "resize_keyboard": True,
            "one_time_keyboard": True,
            }
        }
    data = json.dumps(data)
    resp = requests.post(base_url_download, data=data, headers=headers)

def send_message(user, message):
    base_url_message = base_url + '/sendMessage'
    headers = {"Content-Type": "application/json"}
    data = {
        "chat_id": user,
        "text": message,
        }

    data = json.dumps(data)
    resp = requests.post(base_url_message, data=data, headers=headers)

def send_audio(user, audio):
    base_url_audio = base_url + '/sendAudio'
    audio = open(audio, 'rb')
    data = {
        "chat_id": user
        }
    files = {
        "audio": audio
    }
    resp = requests.get(base_url_audio, data=data, files=files)

def send_video(user, video):
    base_url_video = base_url + '/sendVideo'
    video = open(video, 'rb')
    data = {
        "chat_id": user
        }
    files = {
        "video": video
    }
    resp = requests.get(base_url_video, data=data, files=files)

############################################

base_url = 'https://api.telegram.org/botxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
offset = 0
formats = ['Audio', '144p', '240p', '360p', '480p', '720p', '1080p', '1440p', '2160p']

while True:
    try:
        offset = read_msg(offset)
    except:
        pass
    time.sleep(1)

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...