Ir al contenido
  1. Archivo/

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

·833 palabras·4 mins

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