Гайд - Исходники - Скрипт скачивания медиа (TikTok, YouTube, VK etc...) | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой скрипт на основе слитого?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Гайд Исходники Скрипт скачивания медиа (TikTok, YouTube, VK etc...)

bandicuttt

Сеньор
Автор темы
int('xyi')
8 Янв 2023
235
64
28
Предыстория:​
Очередной заказчик, очередной заказ. Необходимо скачивать медийку из разных соц.сетей. Первым делом я пошёл искать модули на всеми любимом pypi, но поиски не привели ни к чему хорошему. Большинство модулей или устарели, или просто не работают. Следующим шагом я пошёл искать открытые API вроде ssyoutube или safefrom, которые когда-то были доступны всем, но сейчас стали закрытыми. Писать это дело с 0 самостоятельно у меня не было никакого желания, поэтому я пошёл лазить по гиту и нашёл Cobalt.

Возможности:​
  • Скачивание видео
  • Скачивание аудио
  • Настройка кодеков
  • Настройка качества
  • Возможность убрать вотермарки
  • Возможность отделение аудио от видео и наоборот
И это только часть функционала!

Поддерживаемые ресурсы:​
  • TikTok
  • YouTube
  • Instagram + Reels
  • Twitter
  • VK
  • ...
Со всем списком можете ознакомиться в репозитории проекта.


Авторство:​
Модуль не мой, я написал только класс который с ним взаимодействует, а работа проделана просто огромная. Поэтому указываю все ссылки здесь и рекомендую форкнуть или поставить звезду данному проекту, он это заслужил. Проект полностью опенсурс, что даёт возможность не зависеть от каких-то сраных не хороших API. Поэтому скажем автору большое спасибо.
COBALT GITHUB

Описание:​
Проект на nodeJS, благо автор настолько красавчик, что запихал это все дело в докер. Более того поднял свой сайт и туда можно слать запросы :), но лучше конечно не тревожить и поднимать своё, раз такая возможность имеется. Все инструкции по деплою имеются в описании модуля.
P.S Когда поднимал проект просто из нода, у меня почему-то была проблема с подключением к интернету, зато из докера всё запустилось прекрасно. Лучше сразу из докера поднимать.

Python:​
Ну и собственно, так, как я работаю с питоном, мне это всё нужно было именно для этого языка, я написал класс для взаимодействия с Cobalt.
Код:
import json
import os
import random
import aiohttp
import aiofiles
import string

class CobaltModule:
    def __init__(self) -> None:
        self.url = 'https://co.wukko.me/api/json'
    async def get_download_link(self, data):
        headers = {
            'Content-Type':'application/json',
            'Accept':'application/json',
            'host':'co.wukko.me',
        }
        async with aiohttp.ClientSession() as session:
            async with session.post(self.url, json=data, headers=headers) as response:
                return json.loads(await response.text()).get('url')
            
    async def check_bytes_count(self, size_b):
        if size_b / (1024 * 1024) < 50:
            return True
        return False
            
    async def download_media_file(self, url):
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                if response.status == 200:
                    
                    content = await response.read()
                    filename = ''.join(random.choices(string.ascii_lowercase, k=10)) + '.mp4'
                    filepath = os.path.join('media', filename)
                    
                    if await self.check_bytes_count(len(content)):
                        async with aiofiles.open(filepath, 'wb') as f:
                            await f.write(content)
                        return filepath
    async def download(self, data):
        url = await self.get_download_link(data)
        if url:
            file_path = await self.download_media_file(str(url))
            return file_path 
        return False

cobalt = CobaltModule()

Все методы полностью асинхронные и скачивают медиа в локальную папку media. Если необходимости хранить у себя нет, то можете сократить основной метод download, до:
Код:
    async def download(self, data):
        url = await self.get_download_link(data)
        return url if url else False


P.S Мой класс запилен только под скачивание формата .mp4, мне просто другие форматы не были нужны. Всё, что нужно сделать, чтобы другие форматы тоже скачивались, это из ссылки вытащить расширение файла и при его сохранение указывать нужное расширение.

Надеюсь кому-то помог :)
 
Like
  • 3
Реакции: 2 users
Активность:
Пока что здесь никого нет