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

6 minutos de lectura

He actualizado el bot quitando las librerías innecesarias, simplificando un poco más todo el proceso, además he añadido otro pequeño script para publicar en Twitter o Mastodon el último artículo publicado en el blog, de esta forma puedes programar su ejecución cuando publiques en el blog

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

1pip install --user feedparser twython

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

1import feedparser
2import random
3from twython import Twython

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 :

1CONSUMER_KEY = "xxxxxxxxx"
2CONSUMER_SECRET = "xxxxxxxxx"
3ACCESS_KEY = "xxxxxxxxx"
4ACCESS_SECRET ="xxxxxxxxx"

Obteniendo articulo aleatorio del Feed

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

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

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

1d = feedparser.parse(feed)

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

1feedlen = len(d['entries'])
2num = 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.

1api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
2status_text = d['entries'][num]['title'] + '\n' + d['entries'][num]['link']
3articulo = ("Recordando artículos publicados:" +'\n' + status_text)
4api.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

1from mastodon import Mastodon
2
3    # Token y url de la Instancia
4    mastodon = Mastodon(
5    access_token = 'xxxxxxx',
6    api_base_url = 'https://mastodon.social/'
7    )
8    mastodon.status_post(articulo)

Script final

El script final quedará de la siguiente forma:

 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4
 5# script que lee el feed rss de un blog y publica un articulo
 6# de forma aleatoria en twitter y mastodon
 7
 8# Tienes que tener instaladas las librerias feedparser,
 9# Twython, Mastodon
10
11# Autor: Carlos M.
12# https://elblogdelazaro.org
13
14# Llama a los modulos Python
15import feedparser
16import random
17from twython import Twython
18
19
20# Llamando a las llaves del Diccionario
21CUSTOMER_KEY = 'xxxxxxxxxxxxxxx'
22CUSTOMER_SECRET = 'xxxxxxxxxxxxxxxxx'
23ACCESS_TOKEN = 'xxxxxxxxxxxx'
24ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxxxxxx'
25# Seleccionamos el Feed
26feed = 'https://elblogdelazaro.org/index.xml'
27
28# Parseamos el Feed
29d = feedparser.parse(feed)
30
31# Extrae la longitud del Feed y aleatoreamente selecciona un articulo
32feedlen = len(d['entries'])
33num = random.randint(0, feedlen)
34
35# Inicializa la API de Twitter, escribe el nuevo estado y salimos
36api = Twython(CUSTOMER_KEY, CUSTOMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
37status_text = d['entries'][num]['title'] + '\n' + d['entries'][num]['link']
38articulo = ("Recordando artículos publicados:" + '\n' + status_text)
39
40api.update_status(status=articulo)
41
42# Publica en mastodon
43
44# Token y url de la Instancia
45mastodon = Mastodon(
46  access_token = 'xxxxxx',
47  api_base_url = 'https://mastodon.social/'
48)
49
50mastodon.status_post(articulo)

Recuerda cambiar xxxxxxx por tu token

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:

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

 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4
 5# script que lee el feed rss de un blog y publica un articulo
 6# de forma aleatoria en twitter y mastodon
 7
 8# Tienes que tener instaladas las librerias feedparser,
 9# Twython, Mastodon
10
11# Autor: Carlos M.
12# https://elblogdelazaro.org
13
14# Llama los modulos Python
15  import feedparser
16  from twython import Twython
17  from mastodon import Mastodon
18
19
20# Llamando a las llaves del Diccionario
21  CONSUMER_KEY = "xxxxxxxxx"
22  CONSUMER_SECRET = "xxxxxxxxx"
23  ACCESS_KEY = "xxxxxxxxx"
24  ACCESS_SECRET ="xxxxxxxxx"
25
26# Seleccionamos el Feed
27  feed = 'https://elblogdelazaro.otg'
28
29# Parseamos el Feed
30  d = feedparser.parse(feed)
31
32# Inicializa la API de Twitter, escribe el nuevo estado y salimos
33# d['entries'][0] es el último articulo publicado
34  api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
35  status_text = d['entries'][0]['title'] + '\n' + d['entries'][0]['link']
36  articulo = ("Recordando artículos publicados:" +'\n' + status_text.encode)
37  api.update_status(status=articulo)
38
39# Publica en mastodon
40
41# Token y url de la Instancia
42  mastodon = Mastodon(
43    access_token = 'xxxxxx',
44    api_base_url = 'https://mastodon.social/'
45  )
46
47  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.