Para subir un video automáticamente a YouTube utilizando Python, puedes usar la **API de YouTube Data v3**. Aquí tienes una guía paso a paso para lograrlo:
---
### 1. **Configurar la API de YouTube**
1. Ve a [Google Cloud Console](https://console.cloud.google.com/).
2. Crea un proyecto y habilita la **YouTube Data API v3**.
3. Configura la pantalla de consentimiento OAuth 2.0 y crea credenciales:
- Elige **Aplicación de escritorio** o **Aplicación web** según tu caso.
- Descarga el archivo `credentials.json`.
---
### 2. **Instalar las dependencias necesarias**
Usa `pip` para instalar las bibliotecas requeridas:
```bash
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
```
---
### 3. **Código para subir un video a YouTube**
Guarda el archivo `credentials.json` en el mismo directorio que el script y luego usa el siguiente código:
```python
import os
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
# Configura el archivo de credenciales
SCOPES = ["
Tienes que estar registrado para ver este contenido
"]
def obtener_credenciales():
"""Autentica al usuario y devuelve las credenciales."""
creds = None
if os.path.exists("token.json"):
creds = Credentials.from_authorized_user_file("token.json", SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)
creds = flow.run_local_server(port=0)
# Guardar las credenciales para el futuro
with open("token.json", "w") as token:
token.write(creds.to_json())
return creds
def subir_video(video_file, title, description, tags=None, category="22", privacy="public"):
"""Sube un video a YouTube."""
# Autenticar y construir el servicio de YouTube
creds = obtener_credenciales()
youtube = build("youtube", "v3", credentials=creds)
# Configurar los metadatos del video
request_body = {
"snippet": {
"title": title,
"description": description,
"tags": tags or [],
"categoryId": category # 22 es para "People & Blogs"
},
"status": {
"privacyStatus": privacy # "public", "private", o "unlisted"
}
}
# Subir el video
media = MediaFileUpload(video_file, chunksize=-1, resumable=True)
request = youtube.videos().insert(
part="snippet,status",
body=request_body,
media_body=media
)
response = None
while response is None:
status, response = request.next_chunk()
if status:
print(f"Pogre: {int(status.pogre() * 100)}%")
print(f"¡Video subido exitosamente! ID del video: {response['id']}")
# Parámetros del video
video_path = "slideshow.mp4" # Ruta al video generado
title = "Mi Slideshow Automático"
description = "Este es un slideshow creado y subido automáticamente con Python."
tags = ["slideshow", "python", "YouTube API"]
category = "22" # Categoría del video: 22 = People & Blogs
# Subir el video
subir_video(video_path, title, description, tags, category)
```
---
### Explicación del Código
1. **Credenciales:**
- `credentials.json`: Archivo descargado de Google Cloud Console.
- `token.json`: Se genera automáticamente después de la autenticación.
2. **Autenticación:** Usa OAuth 2.0 para autorizar el acceso a tu cuenta de YouTube.
3. **Subida del video:**
- Define los metadatos como título, descripción, etiquetas y categoría.
- Usa `MediaFileUpload` para manejar la subida del archivo.
4. **Privacidad:** Puedes establecer el video como **público**, **privado** o **no listado** cambiando el valor de `privacy`.
---
### Notas
1. **Primer inicio:** La primera vez que ejecutas el script, abrirá una ventana del navegador para autenticar tu cuenta.
2. **Renovación de tokens:** Los tokens se guardan en `token.json` para evitar pedir autenticación en cada ejecución.
3. **Categorías:** Puedes encontrar una lista de categorías de YouTube [aquí](https://developers.google.com/youtube/v3/docs/videoCategories/list).
¿Te gustaría añadir más configuraciones, como miniaturas o programación de la publicación?