Jump to content
Slivator.info

Recommended Posts

Бот для скачивания видео с 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)

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...