Bot en Python para publicar un Feed de forma aleatoria en Twitter y Mastodom
2019-12-26
Índice
- Diccionario para la API de Twitter
- Módulos de Python
- Llamando al diccionario de llaves
- Obteniendo articulo aleatorio del Feed
- Inicializa la API de Twitter, escribe el nuevo estado y salimos
- Publicando en Mastodon
- Script final
- 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… 🐧