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

2019-12-26

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 librería 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 mastodona 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… 🐧

Ingrese la dirección de su instancia


Más publicaciones como esta

Mis aplicaciones 2021

2021-08-02 | #linux

Despuós de haber repasado la extensiones que utilizo durante este 2021 y el estado actual mi configuración de Emacs tambión en este 2021, toca repasar las aplicaciones que habitualmente utilizo, basandome en el articulo que escrbio El Atereao Entorno de escritorio Ya he escrito muchas veces que durante muchos, pero muchos años, he utilizado KDE/Plasma, el entorno con el que empecó en este mundo GNU/Linux, pero desde unos pocos años a esta parte me he vuelto muy de Gnome, no voy a entrar si es mejor o peor, si tiene más o menos opciones o si es más o menos personalízable, simplemente me gusta más, me he acostumbrado a sus atajos de teclado, sus espacios de trabajo dinámicos y a su sencillez.

Continuar leyendo 


Wake On Lan: Enciende el ordenador a travós de la red

2020-03-09 | #linux #raspberry

Tengo una Raspberry Pi que permanece encendida 24/7 ya que necesito que ciertos servicios estón disponibles siempre, en cambio utilizo un mini pc como servidor multimedia, el cual no es necesario que este siempre encendido y mucho menos por las noches, y aprovechando que su placa base soporta Wake On Lan (WOL), es decir, despertarse mediante el envío de paquetes a travós de red, vamos a aprovechar la Raspberry Pi para programar su apagado y encendido a travós de WOL.

Continuar leyendo 