Twitter API: cómo usar una única cuenta para tuitear en nombre de terceros

I. El problema original

  • Tienes dos cuentas en Twitter, llámense @trabajo y @personal.
  • Tienes una única cuenta de desarrollador en Twitter. Supongamos que está vinculada al usuario @trabajo.
  • Quieres usarla para tuitear también en nombre de @personal.

Lo suyo sería disponer de dos cuentas de desarollador, una para cada usuario. Sin embargo, Twitter parece estar dando acceso a tu plataforma de desarrollador con cuentagotas y ni siquiera está claro si conceden más de una cuenta a una misma persona que maneje varios usuarios.

Y de hecho, ese era el problema con el que me encontraba yo particularmente: había obtenido una cuenta de desarrollador hace un tiempo para un pequeño experimento, pero no me la conceden para la principal, @gilbellosta.

II. Tuitear desde Python

Tuitear desde Python consiste esencialmente en hacer:

import tweepy

client = tweepy.Client(
    consumer_key        = 'api auth',
    consumer_secret     = 'api secret',
    access_token        = 'access_token',
    access_token_secret = 'access_token_secret'
)

client.create_tweet(text='Esta es una prueba...')

Hacen falta cuatro tokens:

  • Los dos primeros identifican la API —más bien, la aplicación que va a usar la API— y se obtienen al crearla dentro de la cuenta de desarrollo de Twitter. En mi caso, estaban asociados a la cuenta que creé para aquel experimento.
  • Los otros dos están asociados al usuario. Si en el código anterior se indican los tokens de @trabajo, el tuit se publicará en nombre de @trabajo, pero si se usan los de @personal, etc.
  • Dentro de la plataforma de desarrollo de Twitter se muestran los tokens de aquel usuario (@trabajo, en nuestro caso hipotético) en nombre del cual se pidió acceso a la API.

III. El problema reformulado

El problema consiste entonces en obtener los tokens correspondientes al usuario @personal, que no están directamente disponibles (salvo error u omisión por mi parte) en ningún sitio. Pero se pueden conseguir así:

Primero,

import tweepy

oauth1_user_handler = tweepy.OAuth1UserHandler(
    "api auth", "api secret",
    callback="oob")

print(oauth1_user_handler.get_authorization_url())

El producto del código anterior —una vez reemplazados api auth y api secret por los tokens correspondientes— es una URL. Al abrirla, encontrarás algo así como:

Al aceptar aparece un pin que se copia en

access_token, access_token_secret = oauth1_user_handler.get_access_token('pin number')

y ya, ya tienes los tokens correspondientes a la otra cuenta para hacer con ella aquello para lo que se les haya concedido permiso.

IV. Caveats

  • No sé si esos tokens de usuario obtenidos de esta manera caducan o no. No estoy seguro. Desde que los informáticos han comenzado a escribir como los abogados, ya nada es fijo ni claro.
  • Para poder tuitear en nombre de terceros y que lo que he contado arriba funcione realmente hay que configurar la aplicación que usa la API de una manera particular y no tengo claro cuál es. Conviene, al crearla, dejar que la intuición guíe al ratón al seleccionar las opciones y confiar en ser acompañado de la fuerza.