Publicar Tweets con imagen usando Python Twitter API v2

Tiempo de lectura: 2 minutos

Hola, hoy vamos a aprender cómo podemos publicar Tweets con imagen usando Python con la API de Twitter v2.

Lo primero que tenemos que hacer es crear una APP Twitter, para ello consulta alguno de los tutoriales anteriores.

Vamos a instalar las librerías necesarias:

pip install python-dotenv
pip install requests python-dotenv
pip install requests

Una vez creada, vamos a un editor de texto y añadimos:

import os
import json
import requests
from requests_oauthlib import OAuth1Session
from dotenv import load_dotenv


def enviar_tweet_con_imagen(texto, url_remota_imagen):
    # Cargar las variables de entorno desde un archivo .env
    load_dotenv()

    CONSUMER_KEY = os.getenv("TWITTER_API_KEY")
    CONSUMER_SECRET = os.getenv("TWITTER_API_SECRET_KEY")
    ACCESS_TOKEN = os.getenv("TWITTER_ACESS_TOKEN")
    ACCESS_TOKEN_SECRET = os.getenv("TWITTER_ACESS_TOKEN_SECRET")

    # Crear una instancia de OAuth1Session con tus claves y tokens
    twitter_auth = OAuth1Session(CONSUMER_KEY, client_secret=CONSUMER_SECRET,
                                resource_owner_key=ACCESS_TOKEN,
                                resource_owner_secret=ACCESS_TOKEN_SECRET)

    # Subir la imagen a Twitter y obtener el media_id
    media_url = url_remota_imagen
    media_response = requests.get(media_url)
    if media_response.status_code != 200:
        return {"error": "No se pudo descargar la imagen"}

    files = {
        'media': ('media.jpg', media_response.content)
    }

    media = twitter_auth.post("https://upload.twitter.com/1.1/media/upload.json",
                             files=files)

    if media.status_code != 200:
        return {"error": "No se pudo subir la imagen"}
      
    print (media.text)

    media_id = json.loads(media.text)["media_id"]

    # Publicar el tweet con la imagen
    url = "https://api.twitter.com/2/tweets"

    payload = {
        "text": texto,
        "media": {"media_ids": [str(media_id)]}
    }

    response = twitter_auth.post(url, json=payload, headers={'Content-Type': 'application/json'})

    return response.json()


# Ejemplo de uso
texto_tweet = "¡Mi imagen en Twitter!"
imagen_url = (
    "https://images.quierolibros.com/images/articles/literature/50389_image01.jpg"
)
resultado = enviar_tweet_con_imagen(texto_tweet, imagen_url)
print(resultado)

Este código obtiene una imagen de una URL y la sube a Twitter para luego adjuntarla al Tweet publicado.

Para ejecutarlo tendremos que invocar a la función de esta forma:

enviar_tweet("Hola mundo", "https://images.quierolibros.com/images/articles/literature/50389_image01.jpg")

En este ejemplo subiríamos la imagen de QuieroLibros.

Deja un comentario