Saltar al contenido principal
La X API requiere autenticación para todos los endpoints. El XDK admite tres métodos de autenticación:
  1. Token de portador (solo App)
  2. OAuth 2.0 con PKCE
  3. OAuth 1.0a User Context
  • Token de portador: Úsalo para acceso de solo lectura en endpoints que admiten autenticación de App (p. ej., búsqueda de Posts y endpoints de streaming).
  • OAuth 2.0 PKCE: Autenticación segura para acceso basado en ámbitos (scopes) autorizado por el usuario (p. ej., obtener las métricas non_public del Post del usuario autenticado).
  • OAuth 1.0a: Autenticación heredada para acceso completo de lectura y escritura, incluidos los DMs y las cargas de medios.
Nota: Recomendamos que los desarrolladores dejen de usar OAuth 1.0 y utilicen OAuth 2.0 para el acceso autorizado por el usuario. Obtén las credenciales en el Portal de desarrolladores de X. Necesitarás una cuenta de desarrollador aprobada y una App con permisos adecuados (p. ej., Lectura + Escritura).

Creación de un cliente

Todos los flujos de autenticación crean una instancia de Client:
from xdk import Client

1. Token Bearer (solo App)

Para operaciones de solo lectura sin contexto de usuario. Pasos:
  1. En el Portal de desarrolladores, genera un token Bearer para tu App.
  2. Pásalo al Client.
Ejemplo:
client = Client(bearer_token="XXXXX")
Uso:
response = client.posts.search_recent(query="python", max_results=10)
print(response.data[0]['text'])  # Accede al primer Post

2. OAuth 2.0 con PKCE (contexto de usuario)

Este ejemplo muestra cómo usar OAuth 2.0 con Proof Key for Code Exchange (PKCE). Úsalo para el acceso específico de un usuario (p. ej., publicar en nombre de un usuario, subir contenido multimedia para un usuario, etc.). Pasos:
  1. En el Portal de desarrolladores, registra tu App con un URI de redirección (p. ej., http://localhost:8080/callback).
  2. Obtén el Client ID (para PKCE no se requiere secreto).
  3. Inicia el flujo, dirige al usuario a la URL de autenticación y gestiona el callback.
Ejemplo (usando un servidor web para el callback):
from xdk.auth import OAuth2PKCE
from urllib.parse import urlparse
import webbrowser

# Paso 1: Crear instancia de PKCE
auth = OAuth2PKCE(
    client_id="your_client_id",
    redirect_uri="http://localhost:8080/callback",
    scopes=["tweet.read", "users.read", "offline.access"]  # Ajusta los scopes según sea necesario
)

# Paso 2: Obtener la URL de autorización
auth_url = auth.get_authorization_url()
print(f"Visita esta URL para autorizar: {auth_url}")
webbrowser.open(auth_url)

# Paso 3: Gestionar el callback (en una aplicación real, usa un framework web como Flask)
# Asume que callback_url = "http://localhost:8080/callback?code=AUTH_CODE_HERE"
callback_url = input("Pega aquí la URL de callback completa: ")
parsed = urlparse(callback_url)
code = parsed.query.split("=")[1]

# Paso 4: Intercambiar el código por tokens
tokens = auth.fetch_token(authorization_code=code)
access_token = tokens["access_token"]
refresh_token = tokens["refresh_token"]  # Almacenar para renovar

# Paso 5: Crear el cliente
client = Client(oauth2_access_token=access_token)
Actualización del token (automática en el SDK para sesiones de larga duración):
# Si el token de acceso caduca, actualízalo usando el refresh_token almacenado
tokens = auth.refresh_token(refresh_token=refresh_token)
client = Client(oauth2_access_token=tokens["access_token"])

3. OAuth 1.0a User Context

Para endpoints heredados que requieren compatibilidad con OAuth 1.0. Pasos:
  1. Genera el Consumer Key/Secret y el Access Token/Secret a través del Portal de desarrolladores.
  2. Proporciónalos al inicializar el cliente.
Ejemplo:
from xdk.auth import OAuth1User

auth = OAuth1User(
    consumer_key="your_consumer_key",
    consumer_secret="your_consumer_secret",
    access_token="your_access_token",
    access_token_secret="your_access_token_secret"
)

client = Client(auth=auth)
Nota:
  • Nunca incluyas secretos de forma fija en producción; usa variables de entorno o administradores de secretos (p. ej., os.getenv("X_BEARER_TOKEN")).
  • Para PKCE, asegúrate de usar HTTPS en las URI de redirección en producción.
  • El SDK valida los tokens y lanza xdk.AuthenticationError en caso de errores.