Script de Python para publicar un Feed de forma aleatoria en Twitter y Mastodom

2021-08-16

Índice

  1. Publicando en Twitter
    1. Instalar módulos necesarios
    2. Importar Módulos
    3. Keys API Twitter
    4. Obteniendo articulo aleatorio del Feed
    5. Inicializa la API de Twitter
  2. Publicando en Mastodon
  3. Script final
  4. Programando el script
  5. Tweet/Toot con el último articulo publicado

Hoy veremos como crear un bot en Python para poder leer el Feed de un blog, seleccionar un articulo de forma aleatoria y publicarlo en Twitter o en Mastodon

Publicando en Twitter

Es necesario crearnos una aplicación de Twitter, para ello logueate en tu cuenta de Twitter, ve a https://apps.twitter.com, crea la aplicación y genera los tokens de acceso.

Instalar módulos necesarios

Vamos a necesitar de un par de módulos de python para poder parsear el feed del blog (feedparser) y publicar en Twitter (twython), doy por hecho dde que ya tienes instalado pip en tu ordenador, sino es así, una rápida búsqueda por internet te dirá como hacerlo

pip install --user feedparser twython mastodon

Importar Módulos

Creamos un nuevo fichero de Python, lo podemos llamar bot.py por ejemplo, y empezamos cargando los módulos necesarios para nuestro script

import feedparser
import random
from twython import Twython
from mastodon import Mastodon

Keys API Twitter

Durante el proceso de creación de la aplicación de Twitter, en el primer paso, obtuviste las keys de la API de Twitter y tokens de acceso de tu aplicación

Cargamos los valores de la API diccionario dict :

CONSUMER_KEY = "xxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxx"
ACCESS_KEY = "xxxxxxxxx"
ACCESS_SECRET ="xxxxxxxxx"

Obteniendo articulo aleatorio del Feed

Configuramos la dirección de la fuente RSS del blog a parsear

feed = 'https://elblgodelazaro.org/index.xml'

Utilizando el módulo feedparser analizamos y almacenamos el contenido del feed en el objeto d

d = feedparser.parse(feed)

Extraemos la longitud del feed y aleatoriamente seleccionamos un artículo.

feedlen = len(d['entries'])
num = random.randint(0,feedlen)

Inicializa la API de Twitter

Inicializamos la API de Twitter y escribimos un estado que anexa la información del feed analizado.

api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
status_text = d['entries'][num]['title'] + '\n' + d['entries'][num]['link']
articulo = ("Recordando artículos publicados:" +'\n' + status_text)
api.update_status(status=articulo)

Publicando en Mastodon

Si tambión quieres publicar el artículo obtenido anteriormente en la red Mastodon, al igual que antes, vas a necesitar del módulo de python Mastodon, para instalarla, pip install --user masdoton.

Tambión necesitaremos crear una aplicación en Mastodon, igual que hicimos en Twitter y obtener sus correspondientes tokens

Ahora, simplemente añade el siguiente código al script, sustituyendo https://mastodon.social/ y ‘xxxxxxx’ por la url y el token de tu aplicación Mastodon

from mastodon import Mastodon

    # Token y url de la Instancia
    mastodon = Mastodon(
    access_token = 'xxxxxxx',
    api_base_url = 'https://mastodon.social/'
    )
    mastodon.status_post(articulo)

Script final

El script final quedará de la siguiente forma:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


# script que lee el feed rss de un blog y publica un articulo
# de forma aleatoria en twitter y mastodon

# Tienes que tener instaladas las librerias feedparser,
# Twython, Mastodon

# Autor: Carlos M.
# https://elblogdelazaro.org

# Llama a los modulos Python
import feedparser
import random
from twython import Twython


# Llamando a las llaves del Diccionario
CUSTOMER_KEY = 'xxxxxxxxxxxxxxx'
CUSTOMER_SECRET = 'xxxxxxxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxxxxxxxx'
ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxxxxxx'
# Seleccionamos el Feed
feed = 'https://elblogdelazaro.org/index.xml'

# Parseamos el Feed
d = feedparser.parse(feed)

# Extrae la longitud del Feed y aleatoreamente selecciona un articulo
feedlen = len(d['entries'])
num = random.randint(0, feedlen)

# Inicializa la API de Twitter, escribe el nuevo estado y salimos
api = Twython(CUSTOMER_KEY, CUSTOMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
status_text = d['entries'][num]['title'] + '\n' + d['entries'][num]['link']
articulo = ("Recordando artículos publicados:" + '\n' + status_text)

api.update_status(status=articulo)

# Publica en mastodon

# Token y url de la Instancia
mastodon = Mastodon(
  access_token = 'xxxxxx',
  api_base_url = 'https://mastodon.social/'
)

mastodon.status_post(articulo)

Programando el script

Podemos utilizar cron para automatizar la publicación, por ejemplo, si quiero publicar los lunes, miórcoles, viernes, sábado y domingo a las 09 horas un articulo aleatorio del blog y otro a las 18:00 horas:

0 9,18 * * 2,3,4,5,6,0 /usr/bin/python /home/carlos/bin/ebddl2tweet.py

Tweet/Toot con el último articulo publicado

Una vez visto todo el proceso, si ahora deseas mandar un toot o tweet cada vez que publiques un nuevo artículo en tu blog basta crear un nuevo fichero python con el siguiente código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


# script que lee el feed rss de un blog y publica un articulo
# de forma aleatoria en twitter y mastodon

# Tienes que tener instaladas las librerias feedparser,
# Twython, Mastodon

# Autor: Carlos M.
# https://elblogdelazaro.org

# Llama los modulos Python
  import feedparser
  from twython import Twython
  from mastodon import Mastodon


# Llamando a las llaves del Diccionario
  CONSUMER_KEY = "xxxxxxxxx"
  CONSUMER_SECRET = "xxxxxxxxx"
  ACCESS_KEY = "xxxxxxxxx"
  ACCESS_SECRET ="xxxxxxxxx"

# Seleccionamos el Feed
  feed = 'https://elblogdelazaro.otg'

# Parseamos el Feed
  d = feedparser.parse(feed)

# Inicializa la API de Twitter, escribe el nuevo estado y salimos
# d['entries'][0] es el último articulo publicado
  api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
  status_text = d['entries'][0]['title'] + '\n' + d['entries'][0]['link']
  articulo = ("Recordando artículos publicados:" +'\n' + status_text)
  api.update_status(status=articulo)

# Publica en mastodon

# Token y url de la Instancia
  mastodon = Mastodon(
    access_token = 'xxxxxx',
    api_base_url = 'https://mastodon.social/'
  )

  mastodon.status_post(articulo)

Sólo quedaría programarlo o ejecutarlo a la vez que publiques un nuevo articulo

Espero que te haya gustado, pasa un buen día. 🐧


Ingrese la dirección de su instancia