- Lolz
- Автор темы
- Команда форума
- 175
Скрипт скачивания медиа (TikTok, YouTube, VK etc...)
Предыстория:
Очередной заказчик, очередной заказ. Необходимо скачивать медийку из разных соц.сетей. Первым делом я пошёл искать модули на всеми любимом pypi, но поиски не привели ни к чему хорошему. Большинство модулей или устарели, или просто не работают. Следующим шагом я пошёл искать открытые API вроде ssyoutube или safefrom, которые когда-то были доступны всем, но сейчас стали закрытыми. Писать это дело с 0 самостоятельно у меня не было никакого желания, поэтому я пошёл лазить по гиту и нашёл Cobalt.
Возможности:
Поддерживаемые ресурсы:
Авторство:
Модуль не мой, я написал только класс который с ним взаимодействует, а работа проделана просто огромная. Поэтому указываю все ссылки здесь и рекомендую форкнуть или поставить звезду данному проекту, он это заслужил. Проект полностью опенсурс, что даёт возможность не зависеть от каких-тосраных не хороших API. Поэтому скажем автору большое спасибо.
COBALT GITHUB
Описание:
Проект на nodeJS, благо автор настолько красавчик, что запихал это все дело в докер. Более того поднял свой сайт и туда можно слать запросы , но лучше конечно не тревожить и поднимать своё, раз такая возможность имеется. Все инструкции по деплою имеются в описании модуля.
P.S Когда поднимал проект просто из нода, у меня почему-то была проблема с подключением к интернету, зато из докера всё запустилось прекрасно. Лучше сразу из докера поднимать.
Python:
Ну и собственно, так, как я работаю с питоном, мне это всё нужно было именно для этого языка, я написал класс для взаимодействия с Cobalt.
Все методы полностью асинхронные и скачивают медиа в локальную папку media. Если необходимости хранить у себя нет, то можете сократить основной метод download, до:
.S Мой класс запилен только под скачивание формата .mp4, мне просто другие форматы не были нужны. Всё, что нужно сделать, чтобы другие форматы тоже скачивались, это из ссылки вытащить расширение файла и при его сохранение указывать нужное расширение.
Надеюсь кому-то помог
Предыстория:
Очередной заказчик, очередной заказ. Необходимо скачивать медийку из разных соц.сетей. Первым делом я пошёл искать модули на всеми любимом pypi, но поиски не привели ни к чему хорошему. Большинство модулей или устарели, или просто не работают. Следующим шагом я пошёл искать открытые API вроде ssyoutube или safefrom, которые когда-то были доступны всем, но сейчас стали закрытыми. Писать это дело с 0 самостоятельно у меня не было никакого желания, поэтому я пошёл лазить по гиту и нашёл Cobalt.
Возможности:
- Скачивание видео
- Скачивание аудио
- Настройка кодеков
- Настройка качества
- Возможность убрать вотермарки
- Возможность отделение аудио от видео и наоборот
Поддерживаемые ресурсы:
- TikTok
- YouTube
- Instagram + Reels
- VK
- ...
Авторство:
Модуль не мой, я написал только класс который с ним взаимодействует, а работа проделана просто огромная. Поэтому указываю все ссылки здесь и рекомендую форкнуть или поставить звезду данному проекту, он это заслужил. Проект полностью опенсурс, что даёт возможность не зависеть от каких-то
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, мне просто другие форматы не были нужны. Всё, что нужно сделать, чтобы другие форматы тоже скачивались, это из ссылки вытащить расширение файла и при его сохранение указывать нужное расширение.
Надеюсь кому-то помог