PHYTON Скрипт скачивания медиа (TikTok, YouTube, VK etc...)

скрипт скачивания медиа
  • Lolz
  • Автор темы
  • Команда форума
  • 130
Скрипт скачивания медиа (TikTok, YouTube, VK etc...)

Предыстория:
Очередной заказчик, очередной заказ. Необходимо скачивать медийку из разных соц.сетей. Первым делом я пошёл искать модули на всеми любимом 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

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

Надеюсь кому-то помог :)
 
Войдите или зарегистрируйтесь для ответа.
ПОДПИШИСЬ НА КАНАЛ, ЧТО БЫ НЕ ПРОПУСТИТЬ ИНТЕРЕСНЫЙ СЛИВСКЛАДЧИНА ДЖОНСА-ЛУЧШЕЕ МЕСТО ДЛЯ ВЫКУПА ДОРОГИХ КУРСОВ, СХЕМ ЗА КОПЕЙКИ

Просматревшие тему

Сверху