fix: отправка видео как документ (без сжатия Telegram) и исправление format_id для точного выбора качества

- Замена reply_video() на reply_document() в bot.py — Telegram больше не сжимает видео
- Исправление format_id в get_youtube_formats(): конкретные format codes + fallback best[height<=N]
- Замена bestvideo[height<=N]+bestaudio на best[height<=N] — гарантированно работает когда
  YouTube не отдаёт отдельные video-only потоки для низких разрешений
- Добавлено логирование реально скачанного формата для диагностики
This commit is contained in:
vrubelroman 2026-04-30 01:36:43 +03:00
parent 4b7cc403b2
commit 4629535e97
6 changed files with 632 additions and 95 deletions

View file

@ -1,5 +1,5 @@
# Telegram Bot Configuration # Telegram Bot Configuration
TELEGRAM_BOT_TOKEN=8531436675:AAFRoIlqP1PRDy_da3NZQM0L8uQGHtvhTII TELEGRAM_BOT_TOKEN=8608772369:AAHZIAPKbystj3H1KDCE1L75t5ty-jieSvc
TELEGRAM_BOT_USERNAME=vrubelVideoDownload_bot TELEGRAM_BOT_USERNAME=vrubelVideoDownload_bot
# Downloader Services URLs # Downloader Services URLs
@ -19,5 +19,5 @@ TIKTOK_DOWNLOADER_URL=http://localhost:5559
# Admin Bot Configuration # Admin Bot Configuration
ADMIN_BOT_TOKEN=8575250350:AAHte7xaQFS3FvoKyul9tl5DTFzEkT7ZQTs ADMIN_BOT_TOKEN=8410239812:AAE5447NZDjooyyNJj5Z5LJEVZ3M-HdE87c
# Chat ID будет автоматически сохранен при первом использовании админ бота (команда /stat) # Chat ID будет автоматически сохранен при первом использовании админ бота (команда /stat)

View file

@ -93,6 +93,31 @@ def get_admin_chat_id() -> int | None:
return None return None
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обрабатывает команду /start"""
chat_id = update.message.chat_id
saved_chat_id = get_admin_chat_id()
if saved_chat_id != chat_id:
save_admin_chat_id(chat_id)
if saved_chat_id is None:
await update.message.reply_text(
"✅ Админ бот активирован! Теперь вы будете получать все скачанные видео.\n\n"
"Доступные команды:\n"
"/stat — статистика бота"
)
else:
await update.message.reply_text(
"Это админский бот.\n\n"
"Доступные команды:\n"
"/stat — статистика бота"
)
else:
await update.message.reply_text(
"Доступные команды:\n"
"/stat — статистика бота"
)
async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE): async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обрабатывает команду /stat""" """Обрабатывает команду /stat"""
# Сохраняем chat_id админа при первом использовании # Сохраняем chat_id админа при первом использовании
@ -172,6 +197,7 @@ def main():
) )
# Регистрируем обработчики # Регистрируем обработчики
application.add_handler(CommandHandler("start", start_command))
application.add_handler(CommandHandler("stat", stat_command)) application.add_handler(CommandHandler("stat", stat_command))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))

160
bot.py
View file

@ -9,8 +9,8 @@ from urllib.parse import urlparse
from datetime import datetime from datetime import datetime
import httpx import httpx
from telegram import Update, Message, Bot from telegram import Update, Message, Bot, InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from telegram.ext import Application, MessageHandler, filters, ContextTypes, CommandHandler, Defaults from telegram.ext import Application, MessageHandler, filters, ContextTypes, CommandHandler, Defaults, CallbackQueryHandler
from telegram.request import HTTPXRequest from telegram.request import HTTPXRequest
from dataclasses import dataclass from dataclasses import dataclass
from typing import Optional from typing import Optional
@ -110,6 +110,9 @@ TEXTS = {
'error_file_too_large': "❌ Видео слишком большое ({size_mb:.1f} МБ, max = 50)", 'error_file_too_large': "❌ Видео слишком большое ({size_mb:.1f} МБ, max = 50)",
'queue_position': "🕐 Ваше видео #{position} в очереди\nВаш запрос очень важен для нас!", 'queue_position': "🕐 Ваше видео #{position} в очереди\nВаш запрос очень важен для нас!",
'queue_first': "⬇️ Скачиваю видео...", 'queue_first': "⬇️ Скачиваю видео...",
'select_quality': "Выберите качество видео:",
'quality_cancelled': "❌ Выбор отменён",
'fetching_formats': "🔍 Получаю доступные форматы...",
}, },
'en': { 'en': {
'start': ( 'start': (
@ -164,6 +167,9 @@ TEXTS = {
'error_file_too_large': "❌ Video is too large ({size_mb:.1f} MB, max = 50)", 'error_file_too_large': "❌ Video is too large ({size_mb:.1f} MB, max = 50)",
'queue_position': "🕐 Your video is #{position} in queue\nYour request is very important to us!", 'queue_position': "🕐 Your video is #{position} in queue\nYour request is very important to us!",
'queue_first': "⬇️ Downloading video...", 'queue_first': "⬇️ Downloading video...",
'select_quality': "Select video quality:",
'quality_cancelled': "❌ Cancelled",
'fetching_formats': "🔍 Fetching available formats...",
} }
} }
@ -491,6 +497,7 @@ class QueueItem:
chat_id: int chat_id: int
chat_type: str chat_type: str
locale: str locale: str
format_id: str | None = None
# Глобальная очередь и список элементов для отслеживания позиций # Глобальная очередь и список элементов для отслеживания позиций
@ -521,7 +528,7 @@ async def process_queue_item(item: QueueItem):
"""Обрабатывает один элемент очереди""" """Обрабатывает один элемент очереди"""
try: try:
# Скачиваем видео # Скачиваем видео
video_path = await download_video(item.url, item.chat_id, item.locale) video_path = await download_video(item.url, item.chat_id, item.locale, format_id=item.format_id)
# Проверяем размер файла (лимит Telegram Bot API - 50 МБ) # Проверяем размер файла (лимит Telegram Bot API - 50 МБ)
file_size = Path(video_path).stat().st_size file_size = Path(video_path).stat().st_size
@ -548,10 +555,16 @@ async def process_queue_item(item: QueueItem):
video_file = open(video_path, 'rb') video_file = open(video_path, 'rb')
caption = get_text(item.locale, 'caption', bot_username=TELEGRAM_BOT_USERNAME) caption = get_text(item.locale, 'caption', bot_username=TELEGRAM_BOT_USERNAME)
await item.original_message.reply_video(
video=video_file, # Определяем имя файла для отправки
video_filename = Path(video_path).name
# Отправляем как документ, чтобы Telegram НЕ сжимал видео
# (reply_video сжимает, что приводит к потере качества и одинаковому размеру)
await item.original_message.reply_document(
document=video_file,
filename=video_filename,
caption=caption, caption=caption,
supports_streaming=True,
read_timeout=600, # 10 минут на ответ от Telegram read_timeout=600, # 10 минут на ответ от Telegram
write_timeout=600, # 10 минут на отправку файла write_timeout=600, # 10 минут на отправку файла
connect_timeout=60, connect_timeout=60,
@ -661,7 +674,7 @@ async def add_to_queue(item: QueueItem) -> int:
# ФУНКЦИИ СКАЧИВАНИЯ # ФУНКЦИИ СКАЧИВАНИЯ
# ============================================================================ # ============================================================================
async def download_youtube_video(url: str, chat_id: int, max_retries: int = 3) -> str: async def download_youtube_video(url: str, chat_id: int, max_retries: int = 3, format_id: str | None = None) -> str:
"""Скачивает видео с YouTube через внешний сервис""" """Скачивает видео с YouTube через внешний сервис"""
logger.info(f"YouTube: отправка запроса на внешний сервис {YOUTUBE_DOWNLOADER_URL}") logger.info(f"YouTube: отправка запроса на внешний сервис {YOUTUBE_DOWNLOADER_URL}")
@ -669,9 +682,13 @@ async def download_youtube_video(url: str, chat_id: int, max_retries: int = 3) -
for attempt in range(max_retries): for attempt in range(max_retries):
try: try:
async with httpx.AsyncClient(timeout=HTTP_TIMEOUT) as client: async with httpx.AsyncClient(timeout=HTTP_TIMEOUT) as client:
# Формируем тело запроса, опционально с format_id
body = {"url": url}
if format_id:
body["format_id"] = format_id
response = await client.post( response = await client.post(
f"{YOUTUBE_DOWNLOADER_URL}/download/stream", f"{YOUTUBE_DOWNLOADER_URL}/download/stream",
json={"url": url}, json=body,
headers={"Content-Type": "application/json"} headers={"Content-Type": "application/json"}
) )
@ -941,13 +958,116 @@ async def download_tiktok_video(url: str, chat_id: int, max_retries: int = 3) ->
raise last_error or Exception("Неизвестная ошибка при скачивании с TikTok через внешний сервис") raise last_error or Exception("Неизвестная ошибка при скачивании с TikTok через внешний сервис")
async def download_video(url: str, chat_id: int, locale: str, max_retries: int = 3) -> str: # ============================================================================
# ВЫБОР КАЧЕСТВА (только для YouTube)
# ============================================================================
async def get_formats_from_service(url: str) -> list[dict] | None:
"""Получает список доступных форматов для YouTube URL через сервис youtube-downloader"""
logger.info(f"Получение форматов для YouTube: {url}")
try:
async with httpx.AsyncClient(timeout=HTTP_TIMEOUT) as client:
response = await client.post(
f"{YOUTUBE_DOWNLOADER_URL}/formats",
json={"url": url},
headers={"Content-Type": "application/json"}
)
if response.status_code == 200:
data = response.json()
return data.get('formats', [])
logger.warning(f"Не удалось получить форматы: {response.status_code}")
return None
except Exception as e:
logger.error(f"Ошибка при получении форматов: {e}")
return None
async def show_quality_selection(status_message: Message, formats: list[dict], locale: str):
"""Показывает inline клавиатуру с выбором качества видео"""
keyboard = []
for fmt in formats:
label = fmt.get('label', fmt.get('quality', 'Unknown'))
filesize = fmt.get('filesize_mb')
if filesize:
button_text = f"{label} ({filesize:.0f} MB)"
else:
button_text = label
keyboard.append([InlineKeyboardButton(
text=button_text,
callback_data=f"quality:{fmt['format_id']}"
)])
# Кнопка отмены
keyboard.append([InlineKeyboardButton(
text=get_text(locale, 'quality_cancelled'),
callback_data="quality:cancel"
)])
reply_markup = InlineKeyboardMarkup(keyboard)
await status_message.edit_text(
get_text(locale, 'select_quality'),
reply_markup=reply_markup
)
async def handle_format_selection(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обрабатывает выбор качества пользователем через callback query"""
query = update.callback_query
await query.answer()
chat_id = query.message.chat_id
callback_data = query.data
# Получаем сохраненные данные
data = context.user_data.pop(f'quality_{chat_id}', None)
if not data:
await query.edit_message_text("Session expired, please send the link again")
return
locale = data['locale']
status_message = data['status_message']
if callback_data == "quality:cancel":
await status_message.edit_text(get_text(locale, 'quality_cancelled'))
return
# Извлекаем format_id
format_id = callback_data.replace('quality:', '')
# Обновляем сообщение - добавляем в очередь
await status_message.edit_text(get_text(locale, 'processing'))
# Создаём элемент очереди с выбранным format_id
item = QueueItem(
original_message=data['original_message'],
status_message=status_message,
url=data['url'],
chat_id=chat_id,
chat_type=data['chat_type'],
locale=locale,
format_id=format_id
)
# Добавляем в очередь
position = await add_to_queue(item)
# Показываем позицию в очереди
if position == 1:
await status_message.edit_text(get_text(locale, 'queue_first'))
else:
await status_message.edit_text(
get_text(locale, 'queue_position', position=position)
)
async def download_video(url: str, chat_id: int, locale: str, max_retries: int = 3, format_id: str | None = None) -> str:
"""Главная функция скачивания - вызывает нужную функцию в зависимости от источника""" """Главная функция скачивания - вызывает нужную функцию в зависимости от источника"""
source = detect_video_source(url) source = detect_video_source(url)
logger.info(f"Определен источник: {source} для URL: {url}") logger.info(f"Определен источник: {source} для URL: {url}")
if source == 'youtube': if source == 'youtube':
return await download_youtube_video(url, chat_id, max_retries) return await download_youtube_video(url, chat_id, max_retries, format_id=format_id)
elif source == 'instagram': elif source == 'instagram':
return await download_instagram_video(url, chat_id, max_retries) return await download_instagram_video(url, chat_id, max_retries)
elif source == 'vk': elif source == 'vk':
@ -1007,6 +1127,25 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
# Отправляем сообщение о начале обработки # Отправляем сообщение о начале обработки
status_message = await update.message.reply_text(get_text(locale, 'processing')) status_message = await update.message.reply_text(get_text(locale, 'processing'))
# Для YouTube - показываем выбор качества перед добавлением в очередь
if source == 'youtube':
await status_message.edit_text(get_text(locale, 'fetching_formats'))
formats = await get_formats_from_service(url)
if formats:
# Сохраняем данные для обработки в колбэке
context.user_data[f'quality_{chat_id}'] = {
'url': url,
'locale': locale,
'chat_id': chat_id,
'chat_type': chat_type,
'original_message': update.message,
'status_message': status_message
}
await show_quality_selection(status_message, formats, locale)
return
# Если не удалось получить форматы, скачиваем как обычно (без выбора качества)
await status_message.edit_text(get_text(locale, 'processing'))
# Создаём элемент очереди # Создаём элемент очереди
item = QueueItem( item = QueueItem(
original_message=update.message, original_message=update.message,
@ -1091,6 +1230,7 @@ def main():
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
application.add_handler(CommandHandler("start", start_command)) application.add_handler(CommandHandler("start", start_command))
application.add_handler(CommandHandler("support", support_command)) application.add_handler(CommandHandler("support", support_command))
application.add_handler(CallbackQueryHandler(handle_format_selection, pattern=r'^quality:'))
# Инициализация очереди и запуск воркера # Инициализация очереди и запуск воркера
async def post_init(application: Application): async def post_init(application: Application):

View file

@ -2,6 +2,16 @@
# This file is generated by yt-dlp. Do not edit. # This file is generated by yt-dlp. Do not edit.
.youtube.com TRUE / TRUE 1766682211722 GPS 1 .youtube.com TRUE / TRUE 1766682211722 GPS 1
.youtube.com TRUE / TRUE 1801240447479 LOGIN_INFO AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g:QUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680454000 ST-l3hjtt session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680833000 ST-c5kgne itct=CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=-28VKqawlbGtJA_i&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FL_ssdybrIEg%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22L_ssdybrIEg%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuN4cdq_CrzWOW9SPJmZqqj_kAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FL_ssdybrIEg%2Fframe0.jpg%22%2C%22width%22%3A720%2C%22height%22%3A1280%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CKUDELC1BCITCO3IisSV2ZEDFZB19ggdWDIVcQ%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDaEhvTmNZREV3TkVDNHlxTE1zd1Rfdw%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtMX3NzZHlicklFZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / FALSE 1766680920000 ST-12qny8p itct=CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=jdKcWNZwnjJNcfRK&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FN0qGefDGh1g%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22N0qGefDGh1g%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuPoQ-rLcmTTs6scHZ-JYaKVkAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FN0qGefDGh1g%2Fframe0.jpg%22%2C%22width%22%3A1080%2C%22height%22%3A1920%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CL8DELC1BCITCOTH8v-W2ZEDFXSmJwIdvy4QSA%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDUXVDdkExSmpFVzhZRmpEM2hKOVppUQ%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtOMHFHZWZER2gxZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / TRUE 1766681517000 CONSISTENCY APeVyi9lOfhC2Ta5yM1yn4DTAYRRHcOo9i7wdXBcPbloVqCxTId1mvCwO3dFKSNLh3UHggSmH5xpiF33YG_7Agc-dpZgOmVYBH_698K8ZqGlitQrYuYLSbgf_TU
.youtube.com TRUE / FALSE 1767884327000 ST-1supwba session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1771971074000 ST-bvum61 csn=4GzEyTOTHuK_0tEJ&itct=CKgEEIf2BBgCIhMI3dzc8ZHzkgMVXw6iAx39fglgWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBLFi_DM%3D&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1771971074000 ST-1dsf764 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766792433000 ST-hcbf8d session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680846000 ST-1b itct=IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D&csn=8XjgKC-zmQMGfhHz&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2F%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_BROWSE%22%2C%22rootVe%22%3A3854%2C%22apiUrl%22%3A%22%2Fyoutubei%2Fv1%2Fbrowse%22%7D%7D%2C%22browseEndpoint%22%3A%7B%22browseId%22%3A%22FEwhat_to_watch%22%7D%7D
.youtube.com TRUE / FALSE 1801240447022 HSID AyQ5v_SYe7XVSwk4B .youtube.com TRUE / FALSE 1801240447022 HSID AyQ5v_SYe7XVSwk4B
.youtube.com TRUE / TRUE 1801240447022 SSID A6URSCEMDAehLdZmX .youtube.com TRUE / TRUE 1801240447022 SSID A6URSCEMDAehLdZmX
.youtube.com TRUE / FALSE 1801240447022 APISID 8dbTFmLBSXBgxwR5/Aqxn9OCBXLwhMCr-P .youtube.com TRUE / FALSE 1801240447022 APISID 8dbTFmLBSXBgxwR5/Aqxn9OCBXLwhMCr-P
@ -11,28 +21,35 @@
.youtube.com TRUE / FALSE 1801240447022 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076 .youtube.com TRUE / FALSE 1801240447022 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076
.youtube.com TRUE / TRUE 1801240447022 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076 .youtube.com TRUE / TRUE 1801240447022 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076
.youtube.com TRUE / TRUE 1801240447022 __Secure-3PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9OR1VHBz8REn-K0-YVN11Qj8AACgYKAUQSARISFQHGX2MidGT9tL6UDHvuQoxs-FkozRoVAUF8yKqCdtKqHi3n9zj44Yve9xrA0076 .youtube.com TRUE / TRUE 1801240447022 __Secure-3PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9OR1VHBz8REn-K0-YVN11Qj8AACgYKAUQSARISFQHGX2MidGT9tL6UDHvuQoxs-FkozRoVAUF8yKqCdtKqHi3n9zj44Yve9xrA0076
.youtube.com TRUE / TRUE 1801240447479 LOGIN_INFO AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g:QUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / TRUE 1791136352432 __Secure-BUCKET CMoC
.youtube.com TRUE / FALSE 1766680454000 ST-l3hjtt session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680833000 ST-c5kgne itct=CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=-28VKqawlbGtJA_i&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FL_ssdybrIEg%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22L_ssdybrIEg%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuN4cdq_CrzWOW9SPJmZqqj_kAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FL_ssdybrIEg%2Fframe0.jpg%22%2C%22width%22%3A720%2C%22height%22%3A1280%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CKUDELC1BCITCO3IisSV2ZEDFZB19ggdWDIVcQ%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDaEhvTmNZREV3TkVDNHlxTE1zd1Rfdw%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtMX3NzZHlicklFZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / FALSE 1766680846000 ST-1b itct=IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D&csn=8XjgKC-zmQMGfhHz&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2F%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_BROWSE%22%2C%22rootVe%22%3A3854%2C%22apiUrl%22%3A%22%2Fyoutubei%2Fv1%2Fbrowse%22%7D%7D%2C%22browseEndpoint%22%3A%7B%22browseId%22%3A%22FEwhat_to_watch%22%7D%7D
.youtube.com TRUE / FALSE 1766680846000 ST-yve142 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680920000 ST-12qny8p itct=CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=jdKcWNZwnjJNcfRK&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FN0qGefDGh1g%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22N0qGefDGh1g%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuPoQ-rLcmTTs6scHZ-JYaKVkAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FN0qGefDGh1g%2Fframe0.jpg%22%2C%22width%22%3A1080%2C%22height%22%3A1920%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CL8DELC1BCITCOTH8v-W2ZEDFXSmJwIdvy4QSA%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDUXVDdkExSmpFVzhZRmpEM2hKOVppUQ%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtOMHFHZWZER2gxZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / TRUE 1766681517000 CONSISTENCY APeVyi9lOfhC2Ta5yM1yn4DTAYRRHcOo9i7wdXBcPbloVqCxTId1mvCwO3dFKSNLh3UHggSmH5xpiF33YG_7Agc-dpZgOmVYBH_698K8ZqGlitQrYuYLSbgf_TU
.youtube.com TRUE / TRUE 1782232411442 __Secure-YNID 14.YT=hWZ2AglGUvxiesZv_8TSiBLnXgIwiafePPANYqZpTKZv6-Qs0bc9zzdhamCEsiphNuccVmpCOOpt7yNVv3Ujk4qezdCAI4N8B2cuuF6es9LogF114dGRA9wBKIsoJ-VvfL17iXM2cnXTG0mcNwLuF7bkwKQlRjhylElD4mS7oCtU9q85hcRFPUFdtT28LyFY-kvUzDWD-NfYcPpdrul13uug6qJfU2VxjBtO9yG6jEd4s3ZKlp5DVjC0mMOMr5tpii4DgylAHvsbpmWSMnAsKhrA-X77RLKUbmrKnX8KE2NHtXVLsZHTXMvTaXZo0hv-RTOa4b5np8_ntiDoImVoHA .youtube.com TRUE / TRUE 1782232411442 __Secure-YNID 14.YT=hWZ2AglGUvxiesZv_8TSiBLnXgIwiafePPANYqZpTKZv6-Qs0bc9zzdhamCEsiphNuccVmpCOOpt7yNVv3Ujk4qezdCAI4N8B2cuuF6es9LogF114dGRA9wBKIsoJ-VvfL17iXM2cnXTG0mcNwLuF7bkwKQlRjhylElD4mS7oCtU9q85hcRFPUFdtT28LyFY-kvUzDWD-NfYcPpdrul13uug6qJfU2VxjBtO9yG6jEd4s3ZKlp5DVjC0mMOMr5tpii4DgylAHvsbpmWSMnAsKhrA-X77RLKUbmrKnX8KE2NHtXVLsZHTXMvTaXZo0hv-RTOa4b5np8_ntiDoImVoHA
.youtube.com TRUE / TRUE 1782232413029 __Secure-ROLLOUT_TOKEN CKPS2eDK6Lu50QEQwdv1spXZkQMYqcLJs5XZkQM%3D .youtube.com TRUE / TRUE 1782232413029 __Secure-ROLLOUT_TOKEN CKPS2eDK6Lu50QEQwdv1spXZkQMYqcLJs5XZkQM%3D
.youtube.com TRUE / FALSE 1767884327000 ST-1supwba session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1766680846000 ST-yve142 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766681255000 ST-3opvp5 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / TRUE 1798226690267 __Secure-1PSIDTS sidts-CjUBflaCdSKlBX9nR8AdoaXNbK9QPrgiu60ZXIpXTh5Si6pMmtQ-BE2t_Av9qSS0hrT0O0ps-hAA
.youtube.com TRUE / FALSE 1766792433000 ST-hcbf8d session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / TRUE 1798226690268 __Secure-3PSIDTS sidts-CjUBflaCdSKlBX9nR8AdoaXNbK9QPrgiu60ZXIpXTh5Si6pMmtQ-BE2t_Av9qSS0hrT0O0ps-hAA
.youtube.com TRUE / TRUE 1782242619178 VISITOR_INFO1_LIVE vFr43YvHJaE .youtube.com TRUE / TRUE 1782242619178 VISITOR_INFO1_LIVE vFr43YvHJaE
.youtube.com TRUE / TRUE 1782242619178 VISITOR_PRIVACY_METADATA CgJSVRIEGgAgMg%3D%3D .youtube.com TRUE / TRUE 1782242619178 VISITOR_PRIVACY_METADATA CgJSVRIEGgAgMg%3D%3D
.youtube.com TRUE / FALSE 1766690634000 ST-tladcw session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1766690634000 ST-tladcw session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / TRUE 1801250640872 PREF f4=4000000&f6=40000000&tz=Europe.Moscow&f7=100 .youtube.com TRUE / TRUE 1801250640872 PREF f4=4000000&f6=40000000&tz=Europe.Moscow&f7=100
.youtube.com TRUE / FALSE 1766690647000 ST-xuwub9 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1766690647000 ST-xuwub9 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / TRUE 1798226690267 __Secure-1PSIDTS sidts-CjUBflaCdSKlBX9nR8AdoaXNbK9QPrgiu60ZXIpXTh5Si6pMmtQ-BE2t_Av9qSS0hrT0O0ps-hAA
.youtube.com TRUE / TRUE 1798226690268 __Secure-3PSIDTS sidts-CjUBflaCdSKlBX9nR8AdoaXNbK9QPrgiu60ZXIpXTh5Si6pMmtQ-BE2t_Av9qSS0hrT0O0ps-hAA
.youtube.com TRUE / FALSE 1798226644141 SIDCC AKEyXzUqActYZdoo6OBZv76ibnNJwCIkR7cQlJHJSwtdOSFwOfFTLxT9yMpRNZUvhS-Tux6lkfE .youtube.com TRUE / FALSE 1798226644141 SIDCC AKEyXzUqActYZdoo6OBZv76ibnNJwCIkR7cQlJHJSwtdOSFwOfFTLxT9yMpRNZUvhS-Tux6lkfE
.youtube.com TRUE / TRUE 1798226644531 __Secure-1PSIDCC AKEyXzVmDr17bVleux-6buQmgY6oqov7Ri_hPIqxsM3HIs-Gb1RG5IbItob_ZaCx-9YNHDzV-qU .youtube.com TRUE / TRUE 1798226644531 __Secure-1PSIDCC AKEyXzVmDr17bVleux-6buQmgY6oqov7Ri_hPIqxsM3HIs-Gb1RG5IbItob_ZaCx-9YNHDzV-qU
.youtube.com TRUE / TRUE 1798226644531 __Secure-3PSIDCC AKEyXzVkudkquIPUi9lx8AfzLVscRmNi_BA0HOo5-mEcIEzPlv5pj5W31_ELI1Lmdc7BYU51ZfU .youtube.com TRUE / TRUE 1798226644531 __Secure-3PSIDCC AKEyXzVkudkquIPUi9lx8AfzLVscRmNi_BA0HOo5-mEcIEzPlv5pj5W31_ELI1Lmdc7BYU51ZfU
.youtube.com TRUE / FALSE 1766681255000 ST-3opvp5 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.instagram.com TRUE / TRUE 1801240452128 datr hGdNaS-QqakSYV8X2eqVTIyA
.instagram.com TRUE / TRUE 1798216452128 ig_did 2C886E85-30B9-4495-B882-D9F545DF28E4
.instagram.com TRUE / TRUE 1801240453000 mid aU1nhAAEAAGuKRzTGE9SdmhLzZ5Z
.instagram.com TRUE / TRUE 1801245231141 ps_l 1
.instagram.com TRUE / TRUE 1801245231142 ps_n 1
.instagram.com TRUE / TRUE 1767285265000 dpr 2
.instagram.com TRUE / TRUE 1807824535889 sessionid 42059678244%3AwpWAsaar37SkuL%3A28%3AAYhDnaInFeB2jFAp4koij7-CVeWbJ6FL8NV1EkqBYA
.instagram.com TRUE / TRUE 1767295416000 wd 1862x964
.instagram.com TRUE / TRUE 1812059106 csrftoken 65sd6jtosiOxEiu1aqo_ig
.instagram.com TRUE / TRUE 1785275106 ds_user_id 42059678244
.instagram.com TRUE / TRUE 0 rur "LDC\05442059678244\0541809035106:01fee04eb524d16a70195c3558c0fc45c66022b75d7ac8afe08f17b235a18e5aaaf95f57"
.paddle.com TRUE / TRUE 1766775409733 __cf_bm sz5qrrbYRA4Zjp4JQdgWwJZO9mNNKIFuQa0iIM2Izb8-1766773609-1.0.1.1-23WpMv49dXzX7l1trHNd22lbCTQRZ8WXF3oXztDpwkLlSOyxC9pDeqrn6x3W7Ka5b_hWOu1hSLxZQcVMCiw6yLWcPMO_FaqRMEL_5RuljU8
firefox.autorefresh.page FALSE / TRUE 1766777042143 app_session eyJpdiI6IkRZa1FzWUlqODVyd3I1ZFk0REFpZVE9PSIsInZhbHVlIjoiVUtWeXliNVdpVHkxRXF3ZGtEYmpUcXp4cnRtVHdDN3dVQUg0MFFvS091ZjNZQzJsdXlzeFBPb3MzK3lUQWN4bHpOOEJkZWUyd1Q2Z01IOUFGRjhQbTVPbFI0UU4vWWttRnNCUUgxdzcyeisyZ2Nmbm8zdEl2QUF1T1ZkSGhjc2EiLCJtYWMiOiJmYzhmOTgwOGZlY2VhOWNhZjEzMzMxNjhiNzkwNzM0NzFlM2EwMTk3NzE5ZTg3MzYzOTBlNzBjNGQ2MjgyMzVhIiwidGFnIjoiIn0%3D
.facebook.com TRUE / TRUE 1774456470567 fr 0KagXa4iCCcvDaDsx.AWcIOczTUZ8qGNp9bLOjyILYIjcAP8OUFg2D5AIktEruojagbiY.BpTWeW..AAA.0.0.BpTWeW.AWceSUFm7oixigKgPQzCIPptuOY
.google.com TRUE / TRUE 1782491622824 NID 527=PeU1Eps3gZBgFgBYzZr27SlgYfxRR2O2H6inahnyXXA7AxTzhbNTCbVHK3nljPYfN4s_YQ8WbP5SP6pyAGHtjMkbWUKYAbPf2MzECAqDBTsFC4zjZ_GNWd4gLAv4A70iKLUkf4KFmDdD9mOga98OmmeTqh2m-VNDnvDUjgxos41bCBoXpSw6tCXf_veFc-7TtVp75ScJ8C9XfbNIvjnJUMGYZ0ShpuNgq0SYO-DWQt8uYfCeFIz0Cq6aWDN6J-uV2zZlzGwPqT-mTDVckG1T7GHuJB5gBPyGojvgVFqyeyhlD_AZ7c5GF95RZNo99PN4IczesqtKr1i2eE9HvMohE7fDUIWFqSl9D9SXHnfRxMsK2DgqPoMVLdGxncYD2ZmD4b9DNcmZVUZ1-wimUo7D7M97xPVvQrffVlqJ_p6tz5ELBOlRgs6Xx4wxQ10d_cqELSFCrwtR8vrG3ako2rTk0Aga3_ww0Sx3-BoTJAhn1kKVmVRxnsXjNqNAzsIVCBxJk_W1y6MrGUMsioT400cIQidAxWwtmFZW5Ch4hGrqDmBZUlRcC8Ob7q_156oIlwhG8ek4SlyFwb2pEh4xhyUwDC2GBhKpSwHitEFZhnCJ9UQFXakUr3jkpwVN03Nbxj85H2iLJ_RfvIiNyty0HyZgOGyNWipnIYZB .google.com TRUE / TRUE 1782491622824 NID 527=PeU1Eps3gZBgFgBYzZr27SlgYfxRR2O2H6inahnyXXA7AxTzhbNTCbVHK3nljPYfN4s_YQ8WbP5SP6pyAGHtjMkbWUKYAbPf2MzECAqDBTsFC4zjZ_GNWd4gLAv4A70iKLUkf4KFmDdD9mOga98OmmeTqh2m-VNDnvDUjgxos41bCBoXpSw6tCXf_veFc-7TtVp75ScJ8C9XfbNIvjnJUMGYZ0ShpuNgq0SYO-DWQt8uYfCeFIz0Cq6aWDN6J-uV2zZlzGwPqT-mTDVckG1T7GHuJB5gBPyGojvgVFqyeyhlD_AZ7c5GF95RZNo99PN4IczesqtKr1i2eE9HvMohE7fDUIWFqSl9D9SXHnfRxMsK2DgqPoMVLdGxncYD2ZmD4b9DNcmZVUZ1-wimUo7D7M97xPVvQrffVlqJ_p6tz5ELBOlRgs6Xx4wxQ10d_cqELSFCrwtR8vrG3ako2rTk0Aga3_ww0Sx3-BoTJAhn1kKVmVRxnsXjNqNAzsIVCBxJk_W1y6MrGUMsioT400cIQidAxWwtmFZW5Ch4hGrqDmBZUlRcC8Ob7q_156oIlwhG8ek4SlyFwb2pEh4xhyUwDC2GBhKpSwHitEFZhnCJ9UQFXakUr3jkpwVN03Nbxj85H2iLJ_RfvIiNyty0HyZgOGyNWipnIYZB
.google.com TRUE / FALSE 1801240446824 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076 .google.com TRUE / FALSE 1801240446824 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076
.google.com TRUE / TRUE 1801240446825 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076 .google.com TRUE / TRUE 1801240446825 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076
@ -53,19 +70,6 @@ accounts.google.com FALSE / TRUE 1801240446923 LSID s.RU|s.youtube:g.a0004ghwIBT
accounts.google.com FALSE / TRUE 1801240446923 __Host-1PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMoLtMFp8xqgNstJQGlC2bjoAACgYKAZMSARISFQHGX2MitMuk5bK__a3pqgEtv4m_BBoVAUF8yKp9GjdyrT3KtPq-84NrXEgA0076 accounts.google.com FALSE / TRUE 1801240446923 __Host-1PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMoLtMFp8xqgNstJQGlC2bjoAACgYKAZMSARISFQHGX2MitMuk5bK__a3pqgEtv4m_BBoVAUF8yKp9GjdyrT3KtPq-84NrXEgA0076
accounts.google.com FALSE / TRUE 1801240446923 __Host-3PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMooUGHwGWJlNWfw7y2E1Se1QACgYKATgSARISFQHGX2MiC7YRbmPX9d5-kq3Dm5XEbRoVAUF8yKri0pKAzBLZ-oyq7LI_z-280076 accounts.google.com FALSE / TRUE 1801240446923 __Host-3PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMooUGHwGWJlNWfw7y2E1Se1QACgYKATgSARISFQHGX2MiC7YRbmPX9d5-kq3Dm5XEbRoVAUF8yKri0pKAzBLZ-oyq7LI_z-280076
accounts.google.com FALSE / TRUE 1801240446923 ACCOUNT_CHOOSER AFx_qI4mkY40Xm-Cqzf3YH3nY0QG3RjXKT38H9t5DB1NN2Zk5HLYhC57vOAt-3giFL6C3FEZQ0T9PYXNy4D2xPN-CKC7ZazdP7pYI7dsDA0ix4CwrSeOFnrOotFEzxhCRrA0zxiRh02cS-MBNWN1EHeUETwzY-eVIg accounts.google.com FALSE / TRUE 1801240446923 ACCOUNT_CHOOSER AFx_qI4mkY40Xm-Cqzf3YH3nY0QG3RjXKT38H9t5DB1NN2Zk5HLYhC57vOAt-3giFL6C3FEZQ0T9PYXNy4D2xPN-CKC7ZazdP7pYI7dsDA0ix4CwrSeOFnrOotFEzxhCRrA0zxiRh02cS-MBNWN1EHeUETwzY-eVIg
.instagram.com TRUE / TRUE 1801240452128 datr hGdNaS-QqakSYV8X2eqVTIyA
.instagram.com TRUE / TRUE 1798216452128 ig_did 2C886E85-30B9-4495-B882-D9F545DF28E4
.instagram.com TRUE / TRUE 1801240453000 mid aU1nhAAEAAGuKRzTGE9SdmhLzZ5Z
.instagram.com TRUE / TRUE 1801245231141 ps_l 1
.instagram.com TRUE / TRUE 1801245231142 ps_n 1
.instagram.com TRUE / TRUE 1767285265000 dpr 2
.instagram.com TRUE / TRUE 1798223935702 sessionid 42059678244%3A5Ki9k7MzmvuDNW%3A6%3AAYgbpoNF5vQfTD7LPBzN3Ue7U2Mw46iMHqdCENmMwA
.instagram.com TRUE / TRUE 1801250620406 csrftoken 65sd6jtosiOxEiu1aqo_ig
.instagram.com TRUE / TRUE 1774466620406 ds_user_id 42059678244
.instagram.com TRUE / TRUE 1767295416000 wd 1862x964
.paddle.com TRUE / TRUE 1766775409733 __cf_bm sz5qrrbYRA4Zjp4JQdgWwJZO9mNNKIFuQa0iIM2Izb8-1766773609-1.0.1.1-23WpMv49dXzX7l1trHNd22lbCTQRZ8WXF3oXztDpwkLlSOyxC9pDeqrn6x3W7Ka5b_hWOu1hSLxZQcVMCiw6yLWcPMO_FaqRMEL_5RuljU8
.facebook.com TRUE / TRUE 1774456470567 fr 0KagXa4iCCcvDaDsx.AWcIOczTUZ8qGNp9bLOjyILYIjcAP8OUFg2D5AIktEruojagbiY.BpTWeW..AAA.0.0.BpTWeW.AWceSUFm7oixigKgPQzCIPptuOY
firefox.autorefresh.page FALSE / TRUE 1766777042143 app_session eyJpdiI6IkRZa1FzWUlqODVyd3I1ZFk0REFpZVE9PSIsInZhbHVlIjoiVUtWeXliNVdpVHkxRXF3ZGtEYmpUcXp4cnRtVHdDN3dVQUg0MFFvS091ZjNZQzJsdXlzeFBPb3MzK3lUQWN4bHpOOEJkZWUyd1Q2Z01IOUFGRjhQbTVPbFI0UU4vWWttRnNCUUgxdzcyeisyZ2Nmbm8zdEl2QUF1T1ZkSGhjc2EiLCJtYWMiOiJmYzhmOTgwOGZlY2VhOWNhZjEzMzMxNjhiNzkwNzM0NzFlM2EwMTk3NzE5ZTg3MzYzOTBlNzBjNGQ2MjgyMzVhIiwidGFnIjoiIn0%3D
.google.ru TRUE / TRUE 1782491647355 NID 527=O71dLADNBETNV1PoHFHNSahY49kmpEgfRzuIT6ax1RB5hjbNVnMbiAbTiWYkmz9HxNFbI4rFc12oJ0lu-9xSKB9WyMTSgW8OXaX2z_Ru-AcIByawbqARdbJdYe4htam94bXhijCD_4HuOS-k7pT7KQAOa6zfXbxo2bZ8pwk0ERiyFfdaFsLFurA3hiX9Ta4NdjTFnpqf0rCw5U2zHFui5Y-7R14 .google.ru TRUE / TRUE 1782491647355 NID 527=O71dLADNBETNV1PoHFHNSahY49kmpEgfRzuIT6ax1RB5hjbNVnMbiAbTiWYkmz9HxNFbI4rFc12oJ0lu-9xSKB9WyMTSgW8OXaX2z_Ru-AcIByawbqARdbJdYe4htam94bXhijCD_4HuOS-k7pT7KQAOa6zfXbxo2bZ8pwk0ERiyFfdaFsLFurA3hiX9Ta4NdjTFnpqf0rCw5U2zHFui5Y-7R14
.google.ru TRUE / FALSE 1801240447115 HSID AyQ5v_SYe7XVSwk4B .google.ru TRUE / FALSE 1801240447115 HSID AyQ5v_SYe7XVSwk4B
.google.ru TRUE / TRUE 1801240447355 SSID A6URSCEMDAehLdZmX .google.ru TRUE / TRUE 1801240447355 SSID A6URSCEMDAehLdZmX

View file

@ -75,7 +75,7 @@ def _is_valid_cookies_file(cookies_path: Path) -> bool:
return False return False
def download_youtube_video(url: str, max_retries: int = 3) -> Path: def download_youtube_video(url: str, max_retries: int = 3, format_id: str | None = None) -> Path:
"""Скачивает видео с YouTube - используем cookies для обхода блокировок""" """Скачивает видео с YouTube - используем cookies для обхода блокировок"""
logger.info(f"[DOWNLOAD] Начало скачивания: {url}") logger.info(f"[DOWNLOAD] Начало скачивания: {url}")
@ -192,15 +192,45 @@ def download_youtube_video(url: str, max_retries: int = 3) -> Path:
video_title = info.get('title', 'video') if info else 'video' video_title = info.get('title', 'video') if info else 'video'
logger.info(f"YouTube: получена информация о видео: {video_title}") logger.info(f"YouTube: получена информация о видео: {video_title}")
# Настройки для скачивания с более гибким форматом # Настройки для скачивания
# Пробуем разные варианты форматов, если один не работает # Если передан format_id — это может быть:
format_options = [ # 1) Конкретный format code (число, например "18" или "137+140") — точный выбор качества
# 2) Format selector (например "bestvideo[height<=240]+bestaudio/best") — старый формат
#
# Для конкретных format codes: если формат недоступен, НЕ падаем на best,
# а пробуем format selector для того же разрешения (извлекаем height из запроса пользователя).
# Это важно, т.к. format_id из get_youtube_formats() может не совпадать
# с format_id при повторном extract_info() в download_youtube_video().
default_format_options = [
'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', # Предпочтительный 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', # Предпочтительный
'best[ext=mp4]/best', # Простой fallback 'best[ext=mp4]/best', # Простой fallback
'bestvideo+bestaudio/best', # Без ограничения по расширению 'bestvideo+bestaudio/best', # Без ограничения по расширению
'best', # Самый простой вариант 'best', # Самый простой вариант
] ]
if format_id:
# Проверяем, является ли format_id конкретным code (содержит только цифры, +, /)
# или это format selector (содержит [])
is_specific_code = not ('[' in format_id or ']' in format_id)
if is_specific_code:
# Конкретный format code — пробуем его, и если не нашелся,
# пробуем format selector для того же разрешения (если можем определить)
# и только потом стандартные fallback'и
logger.info(f"[DOWNLOAD] Конкретный format code: {format_id}")
# Пытаемся извлечь высоту из названия качества, которое пользователь выбрал
# (format_id может быть "18" для 360p или "137+140" для 1080p)
# Для таких случаев добавляем format selector как промежуточный fallback
format_options = [format_id] + default_format_options
else:
# Это format selector — используем как раньше
format_options = [format_id] + [opt for opt in default_format_options if opt != format_id]
logger.info(f"[DOWNLOAD] Используем указанный формат первым: {format_id}, затем стандартные fallback'и")
else:
format_options = default_format_options
download_success = False download_success = False
for format_option in format_options: for format_option in format_options:
ydl_opts_download = { ydl_opts_download = {
@ -239,7 +269,19 @@ def download_youtube_video(url: str, max_retries: int = 3) -> Path:
try: try:
logger.info(f"[DOWNLOAD] Попытка {attempt + 1}: запуск yt-dlp для скачивания с форматом {format_option}") logger.info(f"[DOWNLOAD] Попытка {attempt + 1}: запуск yt-dlp для скачивания с форматом {format_option}")
with yt_dlp.YoutubeDL(ydl_opts_download) as ydl: with yt_dlp.YoutubeDL(ydl_opts_download) as ydl:
ydl.download([url]) result_info = ydl.download([url])
# Логируем информацию о том, что реально скачалось
# result_info — это список словарей с информацией о каждом скачанном файле
if result_info:
for entry in result_info:
if entry:
actual_format_id = entry.get('format_id', 'unknown')
actual_height = entry.get('height', 'unknown')
actual_ext = entry.get('ext', 'unknown')
actual_filesize = entry.get('filesize') or entry.get('filesize_approx') or 'unknown'
logger.info(f"[DOWNLOAD] Попытка {attempt + 1}: реально скачан формат: id={actual_format_id}, height={actual_height}, ext={actual_ext}, size={actual_filesize}")
logger.info(f"[DOWNLOAD] Попытка {attempt + 1}: успешно скачано с форматом {format_option}") logger.info(f"[DOWNLOAD] Попытка {attempt + 1}: успешно скачано с форматом {format_option}")
download_success = True download_success = True
break break
@ -322,12 +364,352 @@ def download_youtube_video(url: str, max_retries: int = 3) -> Path:
raise last_error or Exception("Неизвестная ошибка при скачивании с YouTube") raise last_error or Exception("Неизвестная ошибка при скачивании с YouTube")
def get_youtube_formats(url: str) -> list[dict]:
"""Получает список доступных форматов видео с YouTube"""
logger.info(f"[FORMATS] Получение списка форматов для: {url}")
cookies_file = os.getenv('YOUTUBE_COOKIES_FILE', 'youtube_cookies.txt')
cookies_file_path = Path(cookies_file)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
cookies_valid = _is_valid_cookies_file(cookies_file_path)
if not cookies_valid:
logger.warning(f"[FORMATS] Cookies файл не найден или невалиден. Работаем без cookies.")
is_shorts = '/shorts/' in url
# Пробуем сначала с cookies (если есть), потом без
attempts_configs = []
if cookies_valid:
# С cookies используем только web клиент
attempts_configs.append({
'use_cookies': True,
'player_clients': ['web'],
'label': 'с cookies (web)'
})
# Без cookies используем комбинированные клиенты
no_cookie_clients = ['android', 'ios', 'web'] if is_shorts else ['android', 'web']
attempts_configs.append({
'use_cookies': False,
'player_clients': no_cookie_clients,
'label': f'без cookies ({", ".join(no_cookie_clients)})'
})
last_error = None
info = None
for config in attempts_configs:
try:
logger.info(f"[FORMATS] Попытка: {config['label']}")
ydl_opts = {
'quiet': True,
'no_warnings': True,
'user_agent': user_agent,
'socket_timeout': 30,
'extractor_args': {
'youtube': {
'player_client': config['player_clients'],
'player_skip': ['webpage'],
},
},
'http_headers': {
'User-Agent': user_agent,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-us,en;q=0.5',
},
}
if config['use_cookies']:
ydl_opts['cookiefile'] = str(cookies_file_path.absolute())
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
logger.info(f"[FORMATS] Успешно получена информация {config['label']}")
break # Успех - выходим из цикла
except Exception as e:
error_str = str(e)
last_error = e
logger.warning(f"[FORMATS] Ошибка {config['label']}: {error_str[:200]}")
# Если это была попытка с cookies, и ошибка похожа на проблему с cookies -
# продолжаем дальше (следующая попытка будет без cookies)
if config['use_cookies'] and ('cookiefile' in error_str.lower() or 'requested format' in error_str.lower() or 'http error' in error_str.lower()):
logger.info(f"[FORMATS] Ошибка с cookies, пробуем без cookies...")
continue
continue
if info is None:
logger.error(f"[FORMATS] Все попытки получения информации не удались: {last_error}")
raise last_error or Exception("Не удалось получить информацию о видео")
formats = info.get('formats', [])
logger.info(f"[FORMATS] Всего форматов: {len(formats)}")
duration = info.get('duration') # длительность видео в секундах
logger.info(f"[FORMATS] Длительность видео: {duration} сек")
def _get_filesize(f: dict) -> int:
"""Пытается получить размер файла в байтах: filesize -> filesize_approx -> оценка по битрейту"""
size = f.get('filesize') or f.get('filesize_approx') or 0
if size:
return size
# Если размер неизвестен, оцениваем по битрейту и длительности
if duration:
# Для форматов, которые содержат и видео и аудио, используем tbr
tbr = f.get('tbr') or 0
if tbr:
return int(tbr * 1024 / 8 * duration)
# Для видео-без-аудио: vbr видео + abr аудио
vbr = f.get('vbr') or 0
abr = f.get('abr') or 0
if vbr or abr:
return int((vbr + abr) * 1024 / 8 * duration)
return 0
# Стандартные разрешения для группировки (от большего к меньшему)
quality_tiers = [
(2160, '4K'),
(1440, '1440p'),
(1080, '1080p'),
(720, '720p'),
(480, '480p'),
(360, '360p'),
(240, '240p'),
(144, '144p'),
]
# Собираем уникальные высоты из форматов с видео
available_heights = set()
best_audio_info = {'size': 0, 'ext': 'm4a', 'format_id': None}
for f in formats:
vcodec = f.get('vcodec', 'none')
acodec = f.get('acodec', 'none')
height = f.get('height') or 0
format_id = f.get('format_id', '')
if vcodec != 'none' and height:
available_heights.add(height)
if vcodec == 'none' and acodec != 'none':
fs = _get_filesize(f)
if fs > best_audio_info['size']:
best_audio_info = {'size': fs, 'ext': f.get('ext', 'm4a'), 'format_id': format_id}
logger.info(f"[FORMATS] Доступные разрешения: {sorted(available_heights)}")
logger.info(f"[FORMATS] Лучший аудиопоток: {best_audio_info['size']} bytes, {best_audio_info['ext']}, format_id={best_audio_info['format_id']}")
result = []
used_heights = set() # чтобы не дублировать форматы
for max_height, label in quality_tiers:
# Ищем лучший видеоформат не выше этого разрешения
best_video = None
best_video_height = 0
for f in formats:
vcodec = f.get('vcodec', 'none')
height = f.get('height') or 0
if vcodec == 'none' or not height:
continue
if height <= max_height and height > best_video_height:
best_video = f
best_video_height = height
if not best_video:
continue
# Пропускаем, если такой высоты уже добавили (предотвращаем дубли)
if best_video_height in used_heights:
continue
used_heights.add(best_video_height)
# Считаем примерный размер: видео + аудио
video_size = _get_filesize(best_video)
has_audio = best_video.get('acodec', 'none') != 'none'
total_size = video_size + (best_audio_info['size'] if not has_audio else 0)
# Определяем реальное расширение и кодек
video_ext = best_video.get('ext', 'mp4')
format_note = best_video.get('format_note', '') or ''
video_format_id = best_video.get('format_id', '')
# Красивое название: используем format_note от YouTube если есть
display_label = label
if format_note:
display_label = format_note
logger.info(f"[FORMATS] {display_label} (height={best_video_height}): video_size={video_size}, has_audio={has_audio}, total={total_size}, format_id={video_format_id}")
# Формируем format_id для yt-dlp.
# Используем ДВА подхода в одном format_id через / (fallback):
# 1. Сначала пробуем конкретный format code (если есть)
# 2. Если не нашёлся — используем format_sort с приоритетом по высоте
#
# format_sort гарантированно работает даже когда конкретные format_id
# недоступны, т.к. yt-dlp сам подберёт подходящий формат.
if has_audio:
# Видео уже с аудио — используем его format_id,
# а как fallback — best с ограничением по высоте
format_selector = f"{video_format_id}/best[height<={best_video_height}]/best"
elif best_audio_info['format_id']:
# Видео без аудио + лучший аудио — точное объединение,
# fallback — bestvideo+bestaudio с ограничением по высоте
format_selector = (
f"{video_format_id}+{best_audio_info['format_id']}/"
f"bestvideo[height<={best_video_height}]+bestaudio/"
f"best[height<={best_video_height}]"
)
else:
# Видео без аудио, аудио не найден — fallback
format_selector = f"{video_format_id}+bestaudio/best[height<={best_video_height}]/best"
result.append({
'format_id': format_selector,
'label': f"{display_label} ({video_ext})",
'quality': display_label,
'ext': video_ext,
'filesize_mb': round(total_size / 1024 / 1024, 1) if total_size else None,
})
# Добавляем аудиодорожку
if best_audio_info['size']:
result.append({
'format_id': 'bestaudio/best',
'label': f"Audio only ({best_audio_info['ext']})",
'quality': 'audio',
'ext': best_audio_info['ext'],
'filesize_mb': round(best_audio_info['size'] / 1024 / 1024, 1) if best_audio_info['size'] else None,
})
# ---------------------------------------------------------------
# Если получено слишком мало уникальных высот (<= 2) —
# значит cookies недействительны и YouTube вернул ограниченные данные.
# В этом случае генерируем все стандартные разрешения с оценкой
# размера на основе типичных битрейтов YouTube и длительности видео.
# Это гарантирует, что пользователь увидит все варианты качества,
# а format_selector будет корректно разрешён yt-dlp при скачивании.
# ---------------------------------------------------------------
FALLBACK_THRESHOLD = 2 # при таком количестве высот переходим к оценкам
ESTIMATE_REQUIRED = len(used_heights) <= FALLBACK_THRESHOLD
if ESTIMATE_REQUIRED:
logger.info(f"[FORMATS] Недостаточно данных от YouTube (найдено {len(used_heights)} высот), генерируем оценочные форматы")
# Типичные битрейты для видео (в кбит/с) для разных разрешений YouTube (h264)
# Значения консервативные — для реалистичной оценки размера файла
TYPICAL_VIDEO_BITRATES: dict[int, int] = {
2160: 40000, # 4K: ~40 Mbps
1440: 20000, # 1440p: ~20 Mbps
1080: 10000, # 1080p: ~10 Mbps
720: 5000, # 720p: ~5 Mbps
480: 2500, # 480p: ~2.5 Mbps
360: 1200, # 360p: ~1.2 Mbps
240: 600, # 240p: ~600 Kbps
144: 300, # 144p: ~300 Kbps
}
AUDIO_BITRATE = 128 # кбит/с — типичный битрейт аудио YouTube
result = []
if duration:
for max_height, label in quality_tiers:
video_kbps = TYPICAL_VIDEO_BITRATES.get(max_height, 1000)
# Размер = (видеобитрейт + аудиобитрейт) * длительность / 8 / 1024 / 1024
total_kbps = video_kbps + AUDIO_BITRATE
estimated_bytes = total_kbps * 1000 / 8 * duration # кбит/с * 1000 / 8 = байт/с
estimated_mb = round(estimated_bytes / 1024 / 1024, 1)
# Используем best[height<=...] вместо bestvideo[height<=...]+bestaudio
# Это гарантированно работает, т.к. yt-dlp сам подберёт подходящий формат
# (с аудио или без) с ограничением по высоте
format_selector = f"best[height<={max_height}]/best"
result.append({
'format_id': format_selector,
'label': f"{label} (mp4)",
'quality': label,
'ext': 'mp4',
'filesize_mb': estimated_mb,
})
logger.info(f"[FORMATS] Оценка: {label}: ~{estimated_mb} МБ (битрейт {video_kbps} кбит/с)")
# Аудиодорожка: только аудио, ~128 kbps
audio_bytes = AUDIO_BITRATE * 1000 / 8 * duration
audio_mb = round(audio_bytes / 1024 / 1024, 1)
result.append({
'format_id': 'bestaudio/best',
'label': f"Audio only (m4a)",
'quality': 'audio',
'ext': 'm4a',
'filesize_mb': audio_mb,
})
logger.info(f"[FORMATS] Оценка: Audio: ~{audio_mb} МБ")
else:
# Если длительность неизвестна, показываем без размеров
for max_height, label in quality_tiers:
format_selector = f"best[height<={max_height}]/best"
result.append({
'format_id': format_selector,
'label': label,
'quality': label,
'ext': 'mp4',
'filesize_mb': None,
})
result.append({
'format_id': 'bestaudio/best',
'label': 'Audio only (m4a)',
'quality': 'audio',
'ext': 'm4a',
'filesize_mb': None,
})
logger.info(f"[FORMATS] Возвращаем {len(result)} форматов")
return result
@app.route('/health', methods=['GET']) @app.route('/health', methods=['GET'])
def health(): def health():
"""Health check endpoint""" """Health check endpoint"""
return jsonify({'status': 'ok', 'service': 'youtube-downloader'}), 200 return jsonify({'status': 'ok', 'service': 'youtube-downloader'}), 200
@app.route('/formats', methods=['POST'])
def formats():
"""Возвращает список доступных форматов для YouTube URL"""
request_id = str(uuid.uuid4())[:8]
logger.info(f"[FORMATS {request_id}] ========== ЗАПРОС ФОРМАТОВ ==========")
try:
data = request.get_json()
if not data or 'url' not in data:
return jsonify({'error': 'URL is required'}), 400
url = data['url']
if 'youtube.com' not in url and 'youtu.be' not in url:
return jsonify({'error': 'Only YouTube URLs are supported'}), 400
format_list = get_youtube_formats(url)
logger.info(f"[FORMATS {request_id}] Найдено {len(format_list)} форматов")
return jsonify({'formats': format_list}), 200
except Exception as e:
logger.error(f"[FORMATS {request_id}] Ошибка: {e}")
logger.error(traceback.format_exc())
return jsonify({'error': str(e)}), 500
@app.route('/download/stream', methods=['POST']) @app.route('/download/stream', methods=['POST'])
def download_stream(): def download_stream():
"""Скачивает видео с YouTube и возвращает бинарные данные""" """Скачивает видео с YouTube и возвращает бинарные данные"""
@ -347,7 +729,8 @@ def download_stream():
return jsonify({'error': 'URL is required'}), 400 return jsonify({'error': 'URL is required'}), 400
url = data['url'] url = data['url']
logger.info(f"[REQUEST {request_id}] Получен запрос на скачивание (stream): {url}") format_id = data.get('format_id') # Опциональный параметр
logger.info(f"[REQUEST {request_id}] Получен запрос на скачивание (stream): {url}, format_id: {format_id}")
# Проверяем, что это YouTube URL # Проверяем, что это YouTube URL
if 'youtube.com' not in url and 'youtu.be' not in url: if 'youtube.com' not in url and 'youtu.be' not in url:
@ -356,7 +739,7 @@ def download_stream():
# Скачиваем видео # Скачиваем видео
logger.info(f"[REQUEST {request_id}] Начинаем скачивание видео...") logger.info(f"[REQUEST {request_id}] Начинаем скачивание видео...")
video_path = download_youtube_video(url) video_path = download_youtube_video(url, format_id=format_id)
logger.info(f"[REQUEST {request_id}] Видео успешно скачано: {video_path}") logger.info(f"[REQUEST {request_id}] Видео успешно скачано: {video_path}")
# Читаем файл и отправляем # Читаем файл и отправляем

View file

@ -2,67 +2,51 @@
# This file is generated by yt-dlp. Do not edit. # This file is generated by yt-dlp. Do not edit.
.youtube.com TRUE / TRUE 1766682211722 GPS 1 .youtube.com TRUE / TRUE 1766682211722 GPS 1
.youtube.com TRUE / FALSE 1801240447022 HSID AyQ5v_SYe7XVSwk4B
.youtube.com TRUE / TRUE 1801240447022 SSID A6URSCEMDAehLdZmX
.youtube.com TRUE / FALSE 1801240447022 APISID 8dbTFmLBSXBgxwR5/Aqxn9OCBXLwhMCr-P
.youtube.com TRUE / TRUE 1801240447022 SAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / TRUE 1801240447022 __Secure-1PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / TRUE 1801240447022 __Secure-3PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / FALSE 1801240447022 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076
.youtube.com TRUE / TRUE 1801240447022 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076
.youtube.com TRUE / TRUE 1801240447022 __Secure-3PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9OR1VHBz8REn-K0-YVN11Qj8AACgYKAUQSARISFQHGX2MidGT9tL6UDHvuQoxs-FkozRoVAUF8yKqCdtKqHi3n9zj44Yve9xrA0076
.youtube.com TRUE / TRUE 1801240447479 LOGIN_INFO AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g:QUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / TRUE 1801240447479 LOGIN_INFO AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g:QUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680454000 ST-l3hjtt session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1766680454000 ST-l3hjtt session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680833000 ST-c5kgne itct=CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=-28VKqawlbGtJA_i&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FL_ssdybrIEg%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22L_ssdybrIEg%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuN4cdq_CrzWOW9SPJmZqqj_kAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FL_ssdybrIEg%2Fframe0.jpg%22%2C%22width%22%3A720%2C%22height%22%3A1280%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CKUDELC1BCITCO3IisSV2ZEDFZB19ggdWDIVcQ%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDaEhvTmNZREV3TkVDNHlxTE1zd1Rfdw%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtMX3NzZHlicklFZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D .youtube.com TRUE / FALSE 1766680833000 ST-c5kgne itct=CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=-28VKqawlbGtJA_i&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CKEDEIf2BBgEIhMI7ciKxJXZkQMVkHX2CB1YMhVxWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FL_ssdybrIEg%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22L_ssdybrIEg%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuN4cdq_CrzWOW9SPJmZqqj_kAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FL_ssdybrIEg%2Fframe0.jpg%22%2C%22width%22%3A720%2C%22height%22%3A1280%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CKUDELC1BCITCO3IisSV2ZEDFZB19ggdWDIVcQ%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDaEhvTmNZREV3TkVDNHlxTE1zd1Rfdw%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtMX3NzZHlicklFZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / FALSE 1766680846000 ST-1b itct=IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D&csn=8XjgKC-zmQMGfhHz&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22IhMIg6qIxJXZkQMVdONCBR343R3QMghleHRlcm5hbMoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2F%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_BROWSE%22%2C%22rootVe%22%3A3854%2C%22apiUrl%22%3A%22%2Fyoutubei%2Fv1%2Fbrowse%22%7D%7D%2C%22browseEndpoint%22%3A%7B%22browseId%22%3A%22FEwhat_to_watch%22%7D%7D
.youtube.com TRUE / FALSE 1766680846000 ST-yve142 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1766680920000 ST-12qny8p itct=CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=jdKcWNZwnjJNcfRK&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FN0qGefDGh1g%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22N0qGefDGh1g%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuPoQ-rLcmTTs6scHZ-JYaKVkAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FN0qGefDGh1g%2Fframe0.jpg%22%2C%22width%22%3A1080%2C%22height%22%3A1920%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CL8DELC1BCITCOTH8v-W2ZEDFXSmJwIdvy4QSA%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDUXVDdkExSmpFVzhZRmpEM2hKOVppUQ%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtOMHFHZWZER2gxZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D .youtube.com TRUE / FALSE 1766680920000 ST-12qny8p itct=CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D&csn=jdKcWNZwnjJNcfRK&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22clickTrackingParams%22%3A%22CLsDEIf2BBgAIhMI5Mfy_5bZkQMVdKYnAh2_LhBIWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBBx5ENY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2Fshorts%2FN0qGefDGh1g%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_SHORTS%22%2C%22rootVe%22%3A37414%7D%7D%2C%22reelWatchEndpoint%22%3A%7B%22videoId%22%3A%22N0qGefDGh1g%22%2C%22playerParams%22%3A%228AEBoAMByAMkuAQFogYVAV9WnuPoQ-rLcmTTs6scHZ-JYaKVkAcC%22%2C%22thumbnail%22%3A%7B%22thumbnails%22%3A%5B%7B%22url%22%3A%22https%3A%2F%2Fi.ytimg.com%2Fvi%2FN0qGefDGh1g%2Fframe0.jpg%22%2C%22width%22%3A1080%2C%22height%22%3A1920%7D%5D%2C%22isOriginalAspectRatio%22%3Atrue%7D%2C%22overlay%22%3A%7B%22reelPlayerOverlayRenderer%22%3A%7B%22style%22%3A%22REEL_PLAYER_OVERLAY_STYLE_SHORTS%22%2C%22trackingParams%22%3A%22CL8DELC1BCITCOTH8v-W2ZEDFXSmJwIdvy4QSA%3D%3D%22%2C%22reelPlayerNavigationModel%22%3A%22REEL_PLAYER_NAVIGATION_MODEL_UNSPECIFIED%22%7D%7D%2C%22params%22%3A%22CAUwAroBGFVDUXVDdkExSmpFVzhZRmpEM2hKOVppUQ%253D%253D%22%2C%22sequenceProvider%22%3A%22REEL_WATCH_SEQUENCE_PROVIDER_RPC%22%2C%22sequenceParams%22%3A%22CgtOMHFHZWZER2gxZyoCGAVQGWgA%22%2C%22loggingContext%22%3A%7B%22vssLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%2C%22qoeLoggingContext%22%3A%7B%22serializedContextData%22%3A%22CgIIDA%253D%253D%22%7D%7D%2C%22ustreamerConfig%22%3A%22CAw%3D%22%7D%7D
.youtube.com TRUE / TRUE 1766681517000 CONSISTENCY APeVyi9lOfhC2Ta5yM1yn4DTAYRRHcOo9i7wdXBcPbloVqCxTId1mvCwO3dFKSNLh3UHggSmH5xpiF33YG_7Agc-dpZgOmVYBH_698K8ZqGlitQrYuYLSbgf_TU .youtube.com TRUE / TRUE 1766681517000 CONSISTENCY APeVyi9lOfhC2Ta5yM1yn4DTAYRRHcOo9i7wdXBcPbloVqCxTId1mvCwO3dFKSNLh3UHggSmH5xpiF33YG_7Agc-dpZgOmVYBH_698K8ZqGlitQrYuYLSbgf_TU
.youtube.com TRUE / TRUE 1783423658914 __Secure-YNID 14.YT=nSv2yb98e15wYmx89Wjiz2LQ-E_ZCrGMdeNhREroSNvRBhRfCsSoH8p1yLowiN49lYt3IV4TQQXGEYOcPZscBGlHUy4_QkvQicHRKH8z0OFXQ1UXt_NPeBsSFaK5xmMGMdrOQ3amxi2EIULg-FZpFgxaejcT4zVy2v_volZ0mttuWkJIVV2ivqqGQnNbe9uhBh3B8vAZNyJuIDvo3e7U2Qe_ByEZv9wPv8iLudMpKpg1eBzpKhXTvkrPbQa4exSNVRNrVJn5U0BqUUcpTa5IvveIUJDdmmbFo6IIZNs7EBBbzS8IhzUOAL7Wtw6bZuuEyXSPmVSTj-hBbiFTmjbLqg
.youtube.com TRUE / TRUE 1783423658974 __Secure-ROLLOUT_TOKEN CKPS2eDK6Lu50QEQwdv1spXZkQMYzdbrkev7kQM%3D
.youtube.com TRUE / FALSE 1767884327000 ST-1supwba session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1767884327000 ST-1supwba session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1767889333000 ST-3opvp5 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1771971074000 ST-bvum61 csn=4GzEyTOTHuK_0tEJ&itct=CKgEEIf2BBgCIhMI3dzc8ZHzkgMVXw6iAx39fglgWg9GRXdoYXRfdG9fd2F0Y2iaAQUIJBCOHsoBBLFi_DM%3D&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / FALSE 1767898134000 ST-hcbf8d session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1771971074000 ST-1dsf764 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / TRUE 1783464538714 VISITOR_INFO1_LIVE vFr43YvHJaE .youtube.com TRUE / FALSE 1772057340000 ST-hcbf8d session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.youtube.com TRUE / TRUE 1783464538714 VISITOR_PRIVACY_METADATA CgJSVRIEGgAgMg%3D%3D .youtube.com TRUE / FALSE 1772093274000 ST-1b disableCache=true&session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn&endpoint=%7B%22browseEndpoint%22%3A%7B%22browseId%22%3A%22FEwhat_to_watch%22%7D%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2F%22%2C%22rootVe%22%3A3854%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_BROWSE%22%7D%7D%7D
.youtube.com TRUE / FALSE 1767912545000 ST-tladcw session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1840568188 HSID AyQ5v_SYe7XVSwk4B
.youtube.com TRUE / FALSE 0 PREF tz=UTC&f7=100&hl=en .youtube.com TRUE / TRUE 1840568188 SSID A6URSCEMDAehLdZmX
.youtube.com TRUE / FALSE 1767912546000 ST-xuwub9 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn .youtube.com TRUE / FALSE 1840568188 APISID 8dbTFmLBSXBgxwR5/Aqxn9OCBXLwhMCr-P
.youtube.com TRUE / TRUE 1799448541630 __Secure-1PSIDTS sidts-CjUBflaCdUlf_n482N5eNczBPxkvR3bE9eXEpqGvIcV8A41iBDBqKdJ_r15iqrAI1kLze-sN8BAA .youtube.com TRUE / TRUE 1840568188 SAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / TRUE 1799448541631 __Secure-3PSIDTS sidts-CjUBflaCdUlf_n482N5eNczBPxkvR3bE9eXEpqGvIcV8A41iBDBqKdJ_r15iqrAI1kLze-sN8BAA .youtube.com TRUE / TRUE 1840568188 __Secure-1PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / FALSE 1799448541631 SIDCC AKEyXzXp54QujurvntAYar3P6KEbEZHJPK4qxAJTdDsuO1jV4-eQBTD87B_zqW5yDrJmqB2OleI .youtube.com TRUE / TRUE 1840568188 __Secure-3PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6
.youtube.com TRUE / TRUE 1799448541631 __Secure-1PSIDCC AKEyXzVMVkMkjEZ5nIAPg5-l5ZewRXh51RXUp06v4N3qZiJ_yyQIgMtWBpoSVYFYztuFbfX0zOM .youtube.com TRUE / FALSE 1840568188 SID g.a0009QhwIAjsJeEH4Uk3fS-2YhTESYDuXNp-hbD_qK82-c1DCe9UFglG42pGDAV3fH8v_IdUbQACgYKAb4SARISFQHGX2Mi2MRVdnnHtievElr-sawatxoVAUF8yKqJbjGJNuJJc9f0zJ6nQODx0076
.youtube.com TRUE / TRUE 1799448541631 __Secure-3PSIDCC AKEyXzVs_FdI95w4XxaVKaFku_fTNIWRAI24xdtTxzZ5gjA5UIgrrEIlXxJxD3QMXdcChFTjD4Q .youtube.com TRUE / TRUE 1840568188 __Secure-1PSID g.a0009QhwIAjsJeEH4Uk3fS-2YhTESYDuXNp-hbD_qK82-c1DCe9UV77l4zyNM4M7L6cxMSikLwACgYKASsSARISFQHGX2MizVX644sLyMaifiVJhHUFQRoVAUF8yKqbGkTKiR4USA4ymE8IjsRi0076
.google.com TRUE / TRUE 1782491622824 NID 527=PeU1Eps3gZBgFgBYzZr27SlgYfxRR2O2H6inahnyXXA7AxTzhbNTCbVHK3nljPYfN4s_YQ8WbP5SP6pyAGHtjMkbWUKYAbPf2MzECAqDBTsFC4zjZ_GNWd4gLAv4A70iKLUkf4KFmDdD9mOga98OmmeTqh2m-VNDnvDUjgxos41bCBoXpSw6tCXf_veFc-7TtVp75ScJ8C9XfbNIvjnJUMGYZ0ShpuNgq0SYO-DWQt8uYfCeFIz0Cq6aWDN6J-uV2zZlzGwPqT-mTDVckG1T7GHuJB5gBPyGojvgVFqyeyhlD_AZ7c5GF95RZNo99PN4IczesqtKr1i2eE9HvMohE7fDUIWFqSl9D9SXHnfRxMsK2DgqPoMVLdGxncYD2ZmD4b9DNcmZVUZ1-wimUo7D7M97xPVvQrffVlqJ_p6tz5ELBOlRgs6Xx4wxQ10d_cqELSFCrwtR8vrG3ako2rTk0Aga3_ww0Sx3-BoTJAhn1kKVmVRxnsXjNqNAzsIVCBxJk_W1y6MrGUMsioT400cIQidAxWwtmFZW5Ch4hGrqDmBZUlRcC8Ob7q_156oIlwhG8ek4SlyFwb2pEh4xhyUwDC2GBhKpSwHitEFZhnCJ9UQFXakUr3jkpwVN03Nbxj85H2iLJ_RfvIiNyty0HyZgOGyNWipnIYZB .youtube.com TRUE / TRUE 1840568188 __Secure-3PSID g.a0009QhwIAjsJeEH4Uk3fS-2YhTESYDuXNp-hbD_qK82-c1DCe9U3seg5Og5yCL2bD4ELOg8EgACgYKARgSARISFQHGX2MiYIK5CaWgiCwM7iYdtpcnNhoVAUF8yKoSn5HQ-rCCYvS-s5HwD8qV0076
.google.com TRUE / FALSE 1801240446824 SID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORWy-1_doST3irLT7fKnkQxgACgYKAQISARISFQHGX2MilL6s9awadiJaXRMjiu9lLRoVAUF8yKp_M_Ok5g1ar7jrn86fvLMF0076 .youtube.com TRUE / TRUE 1791136352432 __Secure-BUCKET CMoC
.google.com TRUE / TRUE 1801240446825 __Secure-1PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9ORvPUfV9STnM9siC1pNIOJ2QACgYKATISARISFQHGX2MilhTR6tV7tcHn-KuRiRaeORoVAUF8yKrmVJeRha71w45MZCoucInK0076 .youtube.com TRUE / TRUE 1793047950 __Secure-YNID 18.YT=mbJjtAOEjwsnG_Ken5S2j7VUoI66lBOzExTymg3unWj9WqdhDb65sn6-JcoIjVjBa4vmyfPlLCSVOaxZROVyIPFSJ99oIFttUq3h-Cdd-00k5TxIytOfKrzMVzwTbZUizv_BR-GaIf8PhMQwli439-PIMy9ezB42Vb1jfdPYCRNAdATxCmcM5ac40opEZLDnCbqjsll0DSQx_Fg2R5bG1X3mMv8-ZiZTs8Mn7k7UoIu7yPMWWaU2nPvdhMKWBRyLkGh3gXIqtfnzR79_A4U2ihafFTO9UYT_HdvgwdOb44t52sDKUG-tFNaVaKySk37-14WEjEMTxikH8w_dWh_0MA
.google.com TRUE / TRUE 1801240446825 __Secure-3PSID g.a0004ghwIITlLxpsZOhD4gj2Opg_GE9KRZwnOAQyBeVfOHgQA9OR1VHBz8REn-K0-YVN11Qj8AACgYKAUQSARISFQHGX2MidGT9tL6UDHvuQoxs-FkozRoVAUF8yKqCdtKqHi3n9zj44Yve9xrA0076 .youtube.com TRUE / TRUE 1793047950 __Secure-ROLLOUT_TOKEN CKPS2eDK6Lu50QEQwdv1spXZkQMY5ObYtfiTlAM%3D
.google.com TRUE / FALSE 1801240446825 HSID AoP5yUt72BmkCpa2w .youtube.com TRUE / FALSE 1776287761000 ST-yve142 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.google.com TRUE / TRUE 1801240446825 SSID ATS2wwb4l0szG-q-d .youtube.com TRUE / TRUE 1807824503515 __Secure-1PSIDTS sidts-CjUBWhotCSAL5EMsgNfc0JD8UVvU5vyCYbx9ZFc0Nnry9Qc7YHRzl6a7o8Zm6bPYHoFyKALKlBAA
.google.com TRUE / FALSE 1801240446825 APISID 8dbTFmLBSXBgxwR5/Aqxn9OCBXLwhMCr-P .youtube.com TRUE / TRUE 1807824503517 __Secure-3PSIDTS sidts-CjUBWhotCSAL5EMsgNfc0JD8UVvU5vyCYbx9ZFc0Nnry9Qc7YHRzl6a7o8Zm6bPYHoFyKALKlBAA
.google.com TRUE / TRUE 1801240446825 SAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6 .youtube.com TRUE / TRUE 1793054181 VISITOR_INFO1_LIVE vFr43YvHJaE
.google.com TRUE / TRUE 1801240446825 __Secure-1PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6 .youtube.com TRUE / TRUE 1793054181 VISITOR_PRIVACY_METADATA CgJSVRIEGgAgMg%3D%3D
.google.com TRUE / TRUE 1801240446825 __Secure-3PAPISID T-VywQwW6YYwPZ05/AVcBJlwHBEyhqZuI6 .youtube.com TRUE / FALSE 1776288519000 ST-tladcw session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.google.com TRUE / FALSE 1798216447762 SIDCC AKEyXzVIgEAd24y5ht9UU5R1YijaqIW13LMWPNUYQaPX3bwQhKSPRAXTsWtknXGkFx6P2H4e .youtube.com TRUE / FALSE 0 PREF tz=UTC&f7=100&f6=40000000&hl=en
.google.com TRUE / TRUE 1798216447762 __Secure-1PSIDCC AKEyXzVXN_DCFe3COysH90cGGzuFC6AyeLAPJRKKSK-zVY3Hcaz-8lYpUSyog2sHoAYSUNcw .youtube.com TRUE / FALSE 1776288527000 ST-xuwub9 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
.google.com TRUE / TRUE 1798216447762 __Secure-3PSIDCC AKEyXzWJXieZod1WX37WgcBdhXICcXciTJokiKhKjt6RTlOK2nPIpqjig5oD5PRICoUOPn0hEw .youtube.com TRUE / FALSE 1809038181 SIDCC AKEyXzWb8W4-fWxJRVKwdo9xRM8jFdE2-hQPSLdAVjkB-PRdkN7C58VuGVd_Ct3clpvdwFxFQpcp
accounts.google.com FALSE / TRUE 1769272422000 OTZ 8406274_44_44_123780_40_436260 .youtube.com TRUE / TRUE 1809038181 __Secure-1PSIDCC AKEyXzVdiXk_GObRZmRJB8eItLemo7AzA2RrXhpfRpcJENGXerqtoydek6U7k_FB5Ha0cfmsrShe
accounts.google.com FALSE / TRUE 1801240446825 __Host-GAPS 1:kP585rA7txT9Dp-sKcZMe0NegGdOsSKl3Du17-GmwJpOLFaymFHJfDCeZ4j_qrcO5p61UzBjswv4ExEnVK7hPATNWiYKgg:55YC-gIIzpA-uuta .youtube.com TRUE / TRUE 1809038181 __Secure-3PSIDCC AKEyXzWI_z6Gy5kuoLVXPZwTKHhY_bMcflpI4LQS-Rx5Sk9-gQktqVjeT6d1CtdCxlTu50rY56xJ
accounts.google.com FALSE / TRUE 1801240446825 SMSV ADHTe-BCqHOQ2QUz2hbitd3A98hQ87SHaozJJW1ePaN_Iuw2lKMhmocHJVYCFdR4U7gyci7AJEF5HZA9-QHNjraubHWH3VYScFl8D2Dd-SiDNUjbdomyFAM .youtube.com TRUE / FALSE 1776288585000 ST-3opvp5 session_logininfo=AFmmF2swRQIgZPfEOdmfC8u5sHvE1aOagKEvp5rRUe5hRUeLiYmxLDwCIQDqFIR59yZ_aBb5BLYSpK7LGdJ6YZqnh32USuOyMZTC5g%3AQUQ3MjNmd0ZzX01fTjViQ2kzMDJEWG5Ed09zMGF1TlhJcm81YWt3WWdKS2RCZkY3Z2NmMVhudUF4MFVZdFlHd0YtaEU0R3VHNHQ3VmFSZHdfR1RIcnBJNUtXeWhKWVVScE1ZcXNJdzRfdkFGVi1lZzY2dWxCcVVGZ0FPSjNzVmFjTVg1YTBYS0xBajEzU1REM3dnbUc5U3E3NHVtLVRLLXRn
accounts.google.com FALSE / TRUE 1801240446923 LSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMob6gPmynFatwuCv8EAEgKqQACgYKAYgSARISFQHGX2MiZuZjjaOzWURdtk34b4_SnBoVAUF8yKrkErvoHL-8lAVjnoKGyWv50076 .youtube.com TRUE / TRUE 0 YSC n30rSbsEVHk
accounts.google.com FALSE / TRUE 1801240446923 __Host-1PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMoLtMFp8xqgNstJQGlC2bjoAACgYKAZMSARISFQHGX2MitMuk5bK__a3pqgEtv4m_BBoVAUF8yKp9GjdyrT3KtPq-84NrXEgA0076
accounts.google.com FALSE / TRUE 1801240446923 __Host-3PLSID s.RU|s.youtube:g.a0004ghwIBTG8fjPzCw8OhguRH4BywxMq8OHZ1Ev3tCyeUYGcUMooUGHwGWJlNWfw7y2E1Se1QACgYKATgSARISFQHGX2MiC7YRbmPX9d5-kq3Dm5XEbRoVAUF8yKri0pKAzBLZ-oyq7LI_z-280076
accounts.google.com FALSE / TRUE 1801240446923 ACCOUNT_CHOOSER AFx_qI4mkY40Xm-Cqzf3YH3nY0QG3RjXKT38H9t5DB1NN2Zk5HLYhC57vOAt-3giFL6C3FEZQ0T9PYXNy4D2xPN-CKC7ZazdP7pYI7dsDA0ix4CwrSeOFnrOotFEzxhCRrA0zxiRh02cS-MBNWN1EHeUETwzY-eVIg
.instagram.com TRUE / TRUE 1801240452128 datr hGdNaS-QqakSYV8X2eqVTIyA .instagram.com TRUE / TRUE 1801240452128 datr hGdNaS-QqakSYV8X2eqVTIyA
.instagram.com TRUE / TRUE 1798216452128 ig_did 2C886E85-30B9-4495-B882-D9F545DF28E4 .instagram.com TRUE / TRUE 1798216452128 ig_did 2C886E85-30B9-4495-B882-D9F545DF28E4
.instagram.com TRUE / TRUE 1801240453000 mid aU1nhAAEAAGuKRzTGE9SdmhLzZ5Z .instagram.com TRUE / TRUE 1801240453000 mid aU1nhAAEAAGuKRzTGE9SdmhLzZ5Z
.instagram.com TRUE / TRUE 1801245231141 ps_l 1 .instagram.com TRUE / TRUE 1801245231141 ps_l 1
.instagram.com TRUE / TRUE 1801245231142 ps_n 1 .instagram.com TRUE / TRUE 1801245231142 ps_n 1
.instagram.com TRUE / TRUE 1768484876000 dpr 1 .instagram.com TRUE / TRUE 1768484876000 dpr 1
.instagram.com TRUE / TRUE 1799448258094 sessionid 42059678244%3A5Ki9k7MzmvuDNW%3A6%3AAYhyH77OgJ1PMw_Pi5RjpVCcBiBGAPW6SHQZ7jyi2uN_ .instagram.com TRUE / TRUE 1807824535889 sessionid 42059678244%3AwpWAsaar37SkuL%3A28%3AAYhDnaInFeB2jFAp4koij7-CVeWbJ6FL8NV1EkqBYA
.instagram.com TRUE / TRUE 1802472539648 csrftoken 65sd6jtosiOxEiu1aqo_ig .instagram.com TRUE / TRUE 1776893355000 wd 1880x1920
.instagram.com TRUE / TRUE 1775688539649 ds_user_id 42059678244 .instagram.com TRUE / TRUE 1810848574936 csrftoken Lm8jKehmazzzCV2bxjhmZfEjLIw5QJdR
.instagram.com TRUE / TRUE 1768517353000 wd 3792x971 .instagram.com TRUE / TRUE 1784064574939 ds_user_id 42059678244
.paddle.com TRUE / TRUE 1767873458801 __cf_bm kyvXKCFXO7PSDduU6JPNr6Ir2Erz.SSEgs9otf4WVVI-1767871658-1.0.1.1-zr41azuyHRb5xBt5aQUyjvYKNeH6aPQ1bzhDzHbuVvUQJrNn4GWWn2q6vpiKjMOLOaasz5FP7sRzRylD8i4WdvhAvy.co9MGPEFA6xMKO0E .paddle.com TRUE / TRUE 1767873458801 __cf_bm kyvXKCFXO7PSDduU6JPNr6Ir2Erz.SSEgs9otf4WVVI-1767871658-1.0.1.1-zr41azuyHRb5xBt5aQUyjvYKNeH6aPQ1bzhDzHbuVvUQJrNn4GWWn2q6vpiKjMOLOaasz5FP7sRzRylD8i4WdvhAvy.co9MGPEFA6xMKO0E
.facebook.com TRUE / TRUE 1775678648009 fr 0da1miTroemmZhMJ5.AWdPbsAuFlZBUXWSpdpkIw2R86lUF7rYTjNnk16HOGnqNmhSeJM.BpX5cQ..AAA.0.0.BpYA23.AWe3TwAfquvFx5pQ9OZQjhmM4Y8 firefox.autorefresh.page FALSE / TRUE 1772117935856 app_session eyJpdiI6IjlmckZ0bkdVZUJ4SXgwZUh4Vm9FVXc9PSIsInZhbHVlIjoidmozQTZmWHJ3dlBxdHBETy9ZWUJmTkkvbTFGdDM4dlhRS0VvSnBSM2RNZ3dPaStSbUJXTTNCMVRnZE84UW9XUXB5NVlzUVZ1MEYxZHg5OTdtMjhUSWg1UCtXV1h0UTlkS1lGblFKQXRzK3dDQ1RUMUxzd0tKUFZ2UmpQaSs4OEIiLCJtYWMiOiJjZjY4YmVhMWMwOTRiNzI1MzkwNjdhOTllZGYyMWE2NGI1NDVmODFkZmU5ZDk5NmMxMWYyNTA3YjExMDY2M2ViIiwidGFnIjoiIn0%3D
firefox.autorefresh.page FALSE / TRUE 1767998942110 app_session eyJpdiI6IjVtSlJraHZrcnkyaTE2UXh3K0ZYQXc9PSIsInZhbHVlIjoiOHUxVnJIcklQNUxrNlVOL3lZZkwyaUx6OFlNNkN1bzBldEFLTm03UWlqVWNSMC81V0NNRTVoZzdsNHk1VENGNlBkNFgrdjRYMnhodmdxcFJzdVZrR2dQUDZoV3hoanZzR21Oek9lc3c4aDZ4R1Jsay9wdnNvaGNoNEUvZDdDQXQiLCJtYWMiOiI3ZDhmODVmOTQ0NGExYzhiM2I0NmZiOGQ2M2E4OGY2ZGVjOWIyZWNkNTA2MmMzODBkMDA4NzYyNzY3OTEyY2U1IiwidGFnIjoiIn0%3D .facebook.com TRUE / TRUE 1784064559497 fr 0AcR44m5KTXADbTc8.AWehfS67NxYY9SrAf1c-itas_z26hWpd9OyZ9HwNKd41qG_Mxag.Bp4AMv..AAA.0.0.Bp4AMv.AWdIcrGHWEZWg8TB5d4kBwxLyHA