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

2019-12-26

Índice

  1. Diccionario para la API de Twitter
  2. Módulos de Python
  3. Llamando al diccionario de llaves
  4. Obteniendo articulo aleatorio del Feed
  5. Inicializa la API de Twitter, escribe el nuevo estado y salimos
  6. Publicando en Mastodon
  7. Script final
  8. Programando el bot

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