# YouTube 下载器（yt\_dlp）集成

## 示例集成：YouTube 下载器

下面是一个使用示例 `yt-dlp` 配合我们的高带宽代理用于视频或音频数据抓取：

### 基本用法

添加一个 `-test` 参数到用户名允许用户测试连接设置。

{% tabs %}
{% tab title="命令行" %}

```bash
yt-dlp --proxy username-test:password@endpoint:60000 \\
"https://www.youtube.com/watch?v=WNCl-69POro"
```

{% endtab %}

{% tab title="Python" %}

```python
import yt_dlp

username = 'YOUR_USERNAME'
password = 'YOUR_PASSWORD'

if not username.endswith("-test"):
    username += "-test"
    
proxy = f'http://{username}:{password}@your-endpoint:60000'

ydl_opts = {
    'proxy': proxy,
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=WNCl-69POro'])
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
为获得最佳性能，请确保每个视频使用不同的 IP 地址下载。有关指导，请参阅下文部分。
{% endhint %}

### 使用不同 IP 的多个 URL

在使用高带宽代理时，每个视频都用不同的 IP 地址下载以确保最佳性能。这是通过为每个请求生成唯一的会话 ID 来实现的，从而为每次下载分配新的 IP 地址。

{% tabs %}
{% tab title="命令行" %}

```bash
# 第一个视频使用一个 IP
yt-dlp --proxy username-$((1 + RANDOM % 100000)):password@endpoint:60000 \\
"https://www.youtube.com/watch?v=6stlCkUDG_s"

# 第二个视频使用不同的 IP
yt-dlp --proxy username-$((1 + RANDOM % 100000)):password@endpoint:60000 \\
"https://www.youtube.com/watch?v=gsnqXt7d1mU"
```

{% endtab %}

{% tab title="Python" %}

```python
import random
import yt_dlp

def download_with_new_ip(url, username, password):
    session_id = random.randint(1, 100000)
    proxy = f'http://{username}-{session_id}:{password}@your-endpoint:60000'

    ydl_opts = {
        'proxy': proxy
    }
    
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        try:
            print(f"Downloading {url} with new IP ({username}-{session_id})...")
            ydl.download([url])
            print(f"Successfully downloaded {url}")
        except Exception as e:
            print(f"Error downloading {url}: {str(e)}")

def main():
    username = 'YOUR_USERNAME'
    password = 'YOUR_PASSWORD'
    
    videos = [
        'https://www.youtube.com/watch?v=6stlCkUDG_s',
        'https://www.youtube.com/watch?v=gsnqXt7d1mU'
    ]
    
    for video in videos:
        download_with_new_ip(video, username, password)

if __name__ == "__main__":
    main()

```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
该函数包含基本的错误处理，以确保即使某次下载失败，流程也能继续。
{% endhint %}
