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

4 minutos de lectura

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

1dict = {'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

1import feedparser
2import sys
3import os
4import random
5
6from twython import Twython
7
8from 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 ;

1CONSUMER_KEY = dict [ 'ckey' ]
2CONSUMER_SECRET = dict [ 'csecret' ]
3ACCESS_KEY = dict [ 'atoken' ]
4ACCESS_SECRET = dict [ 'asecret' ]

Obteniendo articulo aleatorio del Feed

Configuramos la dirección de la fuente RSS del blog

1feed = 'https://feeds.feedburner.com/ElBlogDeLazaro'

Utilizando la biblioteca feedparser analizamos y almacenamos el contenido

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, escribe el nuevo estado y salimos

Simplemente 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 articulo obtenido anteriormente en la red Mastodon, al igual que antes, vas a necesitar de la libreria 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

1
2from mastodon import Mastodon
3
4# Token y url de la Instancia
5mastodon = Mastodon(
6    access_token = 'xxx',
7    api_base_url = 'https://mastodon.social/'
8)
9mastodon.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# bot que lee el feed del blog  y publica un articulo
 6# de forma aleatoria en twitter y mastodon
 7#
 8# Tienes que tener instaladas las librerias
 9# feedparser, Twython, Mastodon
10#
11# Autor: Carlos M.
12# https://elblogdelazaro.org
13#######################################################
14
15
16# Llama los modulos Python
17import feedparser
18import sys
19import os
20import random
21
22from twython import Twython
23
24# Twitter API Key dictionary
25from keys import dict
26
27
28# Llamando a las llaves del Diccionario
29CONSUMER_KEY = dict['ckey']
30CONSUMER_SECRET = dict['csecret']
31ACCESS_KEY = dict['atoken']
32ACCESS_SECRET = dict['asecret']
33
34
35# Seleccionamos el Feed
36feed = 'https://feeds.feedburner.com/ElBlogDeLazaro'
37
38
39# Parseamos el Feed
40d = feedparser.parse(feed)
41
42
43# Extrae la longitud del Feed y aleatoreamente selecciona un articulo
44feedlen = len(d['entries'])
45num = random.randint(0,feedlen)
46
47
48# Inicializa la API de Twitter, escribe el nuevo estado y salimos
49api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
50status_text = d['entries'][num]['title'] + '\n' + d['entries'][num]['link']
51articulo = ("Recordando artículos publicados:" +'\n' + status_text.encode)
52api.update_status(status=articulo)
53
54# Publica en mastodon
55
56from mastodon import Mastodon
57
58# Token y url de la Instancia
59mastodon = Mastodon(
60    access_token = 'xxxxxx',
61    api_base_url = 'https://mastodon.social/'
62)
63
64mastodon.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:

10 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… :penguin: