Ir al contenido
  1. Publicaciones/

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

··879 palabras·5 mins

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

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)

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:

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. 🐧