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

4 minutos de lectura

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

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.

Diccionario para la API de Twitter

En el paso anterior obtuviste las keys de la API de Twitter y tokens de acceso de tu aplicación, crea un fichero de Python, por ejemplo keys.py y crea un diccionario con todos ellos

dict = {'ckey': 'xxx', 'csecret': 'xxx', 'atoken': 'xxx', 'asecret':'xxx'}

Pon los valores que correspondan con tu aplicación en lugar de las ‘xxx’.

Módulos de Python

Creamos un nuevo script de Python, lo podemos llamar bot.py por ejemplo, y empezamos cargando los módulos necesarios para nuestro script, antes debemos de tener instalados feedparser y twython, en caso de que nos los tengas, los puedes instalar mediante pip3 install --user feedparser y pip3 install --user Twython

import feedparser
import sys
import os
import random

from twython import Twython

from keys import dict

También hemos llamado al fichero de Python llamado keys e importado el diccionario dict.

Llamando al diccionario de llaves

Cargamos los valores del diccionario dict ;

CONSUMER_KEY = dict [ 'ckey' ]
CONSUMER_SECRET = dict [ 'csecret' ]
ACCESS_KEY = dict [ 'atoken' ]
ACCESS_SECRET = dict [ 'asecret' ]

Obteniendo articulo aleatorio del Feed

Configuramos la dirección de la fuente RSS del blog

feed = 'https://feeds.feedburner.com/ElBlogDeLazaro'

Utilizando la biblioteca feedparser analizamos y almacenamos el contenido

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, escribe el nuevo estado y salimos

Simplemente 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 articulo obtenido anteriormente en la red Mastodon, al igual que antes, vas a necesitar de la libreria de python Mastodon, para instalarla, pip 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 ‘xxx’ por la url y el token de tu aplicación


from mastodon import Mastodon

# Token y url de la Instancia
mastodon = Mastodon(
    access_token = 'xxx',
    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 -*-

#######################################################
# bot que lee el feed del 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
import sys
import os
import random

from twython import Twython

# Twitter API Key dictionary
from keys import dict


# Llamando a las llaves del Diccionario
CONSUMER_KEY = dict['ckey']
CONSUMER_SECRET = dict['csecret']
ACCESS_KEY = dict['atoken']
ACCESS_SECRET = dict['asecret']


# Seleccionamos el Feed
feed = 'https://feeds.feedburner.com/ElBlogDeLazaro'


# 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(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.encode)
api.update_status(status=articulo)

# Publica en mastodon

from mastodon import Mastodon

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

mastodon.status_post(articulo)

Recuerda cambiar xxxx por tu token

Programando el bot

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 * * 1,3,5,6,0 /usr/bin/python3 /home/carlos/bin/bots/bot.py

Espero que te haya gustado, pasa un buen día… :penguin: