YouTube rate limit protection + progressive retry system
- New: tools/yt_download.py with cookies support + rate limit tracking - New: docs/YOUTUBE-SETUP.md complete documentation - Updated: night-execute jobs to use new script - Updated: TOOLS.md with YouTube section - Added: 5 new YouTube notes (OpenClaw, cost optimization, task system, leads) - Added: credentials/ to .gitignore
This commit is contained in:
17
docs/YOUTUBE-COOKIES.md
Normal file
17
docs/YOUTUBE-COOKIES.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# YouTube Cookies Setup
|
||||
|
||||
Pentru a descărca subtitrări fără rate-limit, avem nevoie de cookies.
|
||||
|
||||
## Extensie browser (cel mai simplu)
|
||||
|
||||
1. Instalează: [Get cookies.txt LOCALLY](https://chrome.google.com/webstore/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc)
|
||||
2. Mergi pe youtube.com, loghează-te
|
||||
3. Click extensie → Export → salvează `youtube-cookies.txt`
|
||||
4. Pune în: `~/clawd/credentials/youtube-cookies.txt`
|
||||
|
||||
## Verificare
|
||||
|
||||
```bash
|
||||
python3 tools/yt_download.py "https://youtu.be/dQw4w9WgXcQ"
|
||||
# Trebuie să vezi: 🍪 Cookies: YES
|
||||
```
|
||||
123
docs/YOUTUBE-SETUP.md
Normal file
123
docs/YOUTUBE-SETUP.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# YouTube Subtitle Download - Setup & Usage
|
||||
|
||||
## Overview
|
||||
|
||||
Script pentru descărcarea subtitrărilor YouTube cu protecție rate limit și retry progresiv.
|
||||
|
||||
## Cerințe
|
||||
|
||||
1. **yt-dlp** - instalat global
|
||||
2. **Deno** - pentru JavaScript challenges (`~/.deno/bin/deno`)
|
||||
3. **Cookies** - din cont YouTube secundar (`credentials/youtube-cookies.txt`)
|
||||
|
||||
## Setup Cookies (o singură dată)
|
||||
|
||||
### Opțiunea 1: Extensie Browser (Recomandat)
|
||||
|
||||
1. Creează/folosește un cont Google secundar (pentru securitate)
|
||||
2. Loghează-te pe youtube.com cu acel cont
|
||||
3. Instalează extensia [Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc)
|
||||
4. Click pe extensie → Export
|
||||
5. Pune fișierul în `credentials/youtube-cookies.txt`
|
||||
|
||||
### Opțiunea 2: yt-dlp direct (dacă ai browser local)
|
||||
|
||||
```bash
|
||||
yt-dlp --cookies-from-browser firefox --cookies credentials/youtube-cookies.txt "https://youtube.com"
|
||||
```
|
||||
|
||||
## Utilizare
|
||||
|
||||
### Download manual
|
||||
|
||||
```bash
|
||||
# Un video
|
||||
python3 tools/yt_download.py "https://youtu.be/VIDEO_ID"
|
||||
|
||||
# Mai multe video-uri (cu pauze automate)
|
||||
python3 tools/yt_download.py URL1 URL2 URL3
|
||||
|
||||
# Verifică status rate limit
|
||||
python3 tools/yt_download.py
|
||||
```
|
||||
|
||||
### Exit codes
|
||||
|
||||
| Code | Semnificație |
|
||||
|------|--------------|
|
||||
| 0 | Success - toate video-urile procesate |
|
||||
| 1 | Erori parțiale - unele video-uri au eșuat |
|
||||
| 2 | Rate limited (429) - s-a oprit, retry mai târziu |
|
||||
| 3 | În cooldown - așteaptă timpul de retry |
|
||||
|
||||
## Rate Limit Protection
|
||||
|
||||
### Prevenire
|
||||
|
||||
- **Cookies obligatorii** - fără cookies, rate limit vine rapid
|
||||
- **Sleep 20s** între video-uri
|
||||
- **Max 30 video-uri** per sesiune
|
||||
|
||||
### Progressive Retry
|
||||
|
||||
Când primim 429:
|
||||
|
||||
```
|
||||
Prima dată → Retry în 2 ore
|
||||
A doua oară → Retry în 4 ore
|
||||
A treia oară → Retry în 24 ore
|
||||
Success → Reset counter
|
||||
```
|
||||
|
||||
### State File
|
||||
|
||||
Rate limit state salvat în `memory/youtube-rate-limit.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"last_429": "2026-02-03T07:00:00",
|
||||
"retry_count": 1,
|
||||
"blocked_until": "2026-02-03T09:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
## Integrare în Jobs
|
||||
|
||||
### night-execute (23:00 București)
|
||||
- Verifică rate limit înainte de a începe
|
||||
- Procesează max 30 video-uri din `approved-tasks.md`
|
||||
- Creează note în `memory/kb/youtube/`
|
||||
|
||||
### night-execute-late (03:00 București)
|
||||
- Continuă cu restul video-urilor
|
||||
- Mută task-uri pentru noaptea următoare
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Signature solving failed"
|
||||
- Verifică că deno e instalat: `~/.deno/bin/deno --version`
|
||||
- Scriptul folosește `--remote-components ejs:github` pentru a descărca solver-ul
|
||||
|
||||
### "429 Too Many Requests"
|
||||
- Verifică `memory/youtube-rate-limit.json` pentru când e retry
|
||||
- Asigură-te că folosești cookies valide
|
||||
- Nu rula manual când job-urile rulează
|
||||
|
||||
### Cookies expirate
|
||||
- Cookies expiră după câteva săptămâni
|
||||
- Re-exportă din browser când nu mai funcționează
|
||||
|
||||
## Securitate
|
||||
|
||||
- **Folosește cont secundar** pentru cookies
|
||||
- Fișierul cookies NU e în git (`.gitignore`)
|
||||
- Nu partaja `credentials/youtube-cookies.txt`
|
||||
|
||||
## Fișiere
|
||||
|
||||
| Fișier | Scop |
|
||||
|--------|------|
|
||||
| `tools/yt_download.py` | Script principal |
|
||||
| `credentials/youtube-cookies.txt` | Cookies YouTube |
|
||||
| `memory/youtube-rate-limit.json` | State rate limit |
|
||||
| `~/.deno/bin/deno` | JavaScript runtime |
|
||||
Reference in New Issue
Block a user