Загрузка...

Telegram Бот для загрузки видео из Тик Тока

Тема в разделе Python создана пользователем n1s_01 7 апр 2025. (поднята 11 май 2025) 242 просмотра

Загрузка...
  1. n1s_01
    n1s_01 Автор темы 7 апр 2025 :coder: n1s-01.click :coder: lolz.live/threads/8514735/ :coder: 471 15 май 2019
    TikTok Video Downloader Bot

    Это Telegram-бот, который позволяет скачивать видео из TikTok, отправляя ссылку на пост. Бот обрабатывает ссылки вида
    ⁡https://vt.tiktok.com/...
    ⁡ или
    ⁡https://www.tiktok.com/...
    ⁡ и возвращает видео прямо в чат. Функциональность скачивания фотографий из TikTok не поддерживается.

    Возможности

    • Скачивание видео из TikTok по прямой ссылке.
    • Возможность добавления своих функций в код.

    Ограничения

    • Бот не поддерживает скачивание фотографий из TikTok.

    Требования

    • Python 3.8+
    • Библиотеки: aiogram, requests, beautifulsoup4
    • Установите зависимости с помощью:
      ⁡pip install aiogram requests beautifulsoup4
    Конфигурация

    • Создайте бота через @BotFather в Telegram и получите токен.
    • Вставьте токен в файл
      ⁡config.py
      ⁡ , заменив пустую строку в переменной TOKEN:
      ⁡TOKEN = "ВАШ_ТОКЕН"

    Использование

    1. Найдите видео в TikTok и скопируйте ссылку.
    2. Отправьте ссылку боту в Telegram.
    3. Бот ответит сообщением "Downloading..." и отправит видео если у него получится его скачать.
    4. Если ссылка некорректна или видео не найдено, бот сообщит об ошибке.

    ⁡main.py

    Python
    import asyncio
    from aiogram import Bot, Dispatcher
    from aiogram.enums import ParseMode
    from config import TOKEN
    from handlers import register_handlers

    async def main():
    bot = Bot(token=TOKEN, parse_mode=ParseMode.HTML)
    dp = Dispatcher()
    register_handlers(dp)
    await dp.start_polling(bot)

    if __name__ == "__main__":
    asyncio.run(main())

    ⁡utils.py

    Python
    from bs4 import BeautifulSoup
    import requests
    import logging

    def extract_media_urls(tiktok_url: str, headers: dict) -> tuple[str | None, list[str]]:
    try:
    response = requests.post(
    "https://ssstik.io/abc?url=dl",
    headers=headers,
    data={"id": tiktok_url, "locale": "en", "tt": "123"},
    timeout=10
    )
    if response.status_code != 200:
    logging.warning(f"Bad response from ssstik.io: {response.status_code}")
    return None, []
    soup = BeautifulSoup(response.text, "html.parser")
    video_link = soup.find("a", class_="pure-button")
    if video_link and "href" in video_link.attrs:
    href = video_link["href"]
    video_url = "https://ssstik.io" + href if href.startswith("/") else href
    return video_url, []
    photo_div = soup.find("div", class_="image-cards")
    if photo_div:
    photo_urls = [img["src"] for img in photo_div.find_all("img") if "src" in img.attrs]
    return None, photo_urls
    return None, []
    except Exception as e:
    logging.exception("Error extracting media URLs")
    return None, []
    ⁡handlers.py

    Python
    from aiogram import Dispatcher, F
    from aiogram.types import Message
    from config import TIKTOK_LINK_PATTERN, HEADERS
    from utils import extract_media_urls
    from downloader import download_and_send_media

    def register_handlers(dp: Dispatcher):
    @dp.message(F.text.regexp(TIKTOK_LINK_PATTERN))
    async def tiktok_handler(message: Message):
    tiktok_url = message.text.strip()
    await message.reply("Downloading...")
    video_url, photo_urls = extract_media_urls(tiktok_url, HEADERS)
    if not video_url and not photo_urls:
    await message.reply("Cannot find media")
    return
    await download_and_send_media(video_url, photo_urls, message, HEADERS)

    @dp.message()
    async def fallback_handler(message: Message):
    await message.reply("Send a TikTok link")
    ⁡downloader.py

    Python
    import requests
    from aiogram.types import BufferedInputFile, InputMediaPhoto
    import logging

    async def download_and_send_media(video_url: str | None, photo_urls: list[str], message, headers: dict):
    try:
    if video_url:
    response = requests.get(video_url, headers=headers, timeout=15)
    if response.status_code == 200:
    video_data = response.content
    await message.reply_video(
    video=BufferedInputFile(video_data, filename="tiktok.mp4"),
    caption="Разработано devai.digital"
    )
    else:
    await message.reply(f"Cannot download video (code: {response.status_code})")
    elif photo_urls:
    media_group = []
    for url in photo_urls:
    response = requests.get(url, headers=headers, timeout=10)
    if response.status_code == 200:
    photo_data = response.content
    media_group.append(
    InputMediaPhoto(media=BufferedInputFile(photo_data, filename="tiktok.jpg"))
    )
    if media_group:
    await message.reply_media_group(media_group)
    await message.reply("Разработано devai.digital")
    else:
    await message.reply(" Не удалось скачать фотографии")
    else:
    await message.reply(" Медиа не найдено")
    except Exception as e:
    logging.exception("Error downloading media")
    await message.reply(f" Ошибка: {str(e)}")
    ⁡config.py

    Python
    import logging
    import re

    logging.basicConfig(level=logging.INFO)

    TOKEN = ""

    HEADERS = {
    "User-Agent": (
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/91.0.4472.124 Safari/537.36"
    )
    }

    TIKTOK_LINK_PATTERN = re.compile(r"https?://(vt\.tiktok\.com|www\.tiktok\.com)/\S+")
     
    7 апр 2025 Изменено
Top