¿Cómo tuitear desde Python?

¿Para que vale eso?

Desde mi cuenta de twitter @walyt publico diariamente diversos gráficos con información relevante del Mercado Eléctrico: precios del spot del día, como se comporta la generación, evolución precios, previsiones energía solar etc…Estos tuits los publico de manera «automatizada» por medio de scripts en Python residentes en una máquina virtual en Google Cloud. Por medio de un crontab planifico a lo largo del día esa publicación de información. Así aseguras una publicación de manera regular, y que la información de base está siempre disponible.

Me di cuenta el fin de semana pasado de que hacía varios días que no salía ningun nuevo tuit. Alarma!. Tras chequear y cacharrear un poco me di cuenta del algún cambio en la API de twitter, que hacía que el procedimiento que estaba usando no era válido. Hasta este fin de semana no he tenido unas horas para arreglarlo. Y parece que ya lo tengo. Para ayudar a quien le pase algo parecido o para quien necesite este código he preparado este post.

Qué necesito?

Lo primero que se necesita es obvio: una cuenta de twitter!!!

Venga, que me imagino que la tenéis. Lo segundo es dar de alta esa cuenta en el portal de desarrollo. Nos encontramos aquí tres modalidades :

  • Free: que te permite acceso gratuito, aunque con alguna limitación, a las APIs de Twitter. Te permite publicar hasta 1.500 tuits al mes, y realizar 50 llamadas (queries) al día. Esta es la modalidad con la que estoy subscrito.
  • Basic : con un coste de 100$/mes, dos entornos de aplicación, descarga de 10.000 tuis al mes, 1.667 peticiones cada 24 horas…
  • Pro : con un coste de 5.000€/mes se multiplican, obviamente, las capacidades: 3 entornos de aplicaciones, puedes descargar hasta un millón de tuits al mes, publicar 100 tuits cada 15 min ó 10.000 al mes. Además de muchos endpoints para la gestión total de una cuenta

…y dar de alta la APP

A continuación daremos de alta la entorno y una aplicación, simplemente hay que añadir una breve descripción…Así me aparece:

y solo queda ir a la pestaña de «Keys and tokens», en la que deberemos generar cinco claves:

  • Bearer Token que identifica a la App
  • API Key y API Secret, que tal como indica : «Think of these as the user name and password that represents your App when making API requests. While your Secret will remain permanently hidden, you can always view the last 6 characters of your API Key
  • Access Token and Access Secret, que de igaul manera describe como : «An Access Token and Secret are user-specific credentials used to authenticate OAuth 1.0a API requests. They specify the Twitter account the request is made on behalf of.«

copia, de manera segura, esas claves y ya estaríamos listos para empezar con Python

Un poco de código

#importamos la librería
import tweepy

#definimos las variables que nos identifican junto con nuestra app
api_key = 'tus valores'
api_key_secret = 'tus valores'
access_token = 'tus valores'
access_token_secret = 'tus valores'

bearer_token = 'tus valores'

#creamos un cliente tweepy
cliente = tweepy.Client(bearer_token=bearer_token,
consumer_key=api_key,
consumer_secret=api_key_secret,
access_token=access_token,
access_token_secret=access_token_secret)

#llamamos a la query de twitter para publicarlo
cliente.create_tweet(text='Hola a todos!')

Y ya debería tener el tuit en el timeline.

Si, como es mi caso, quiere publicar el tuit con un gráfico se deberá subir previamente ese gráfico con el API v1, recoger el id, y añadir ese media_id en la llamada a la query. Queda el código tal que así :

#importamos la librería
import tweepy

#definimos las variables que nos identifican junto con nuestra app
api_key = 'tus valores'
api_key_secret = 'tus valores'
access_token = 'tus valores'
access_token_secret = 'tus valores'
bearer_token = 'tus valores'

#hacemos una llamada al apiv1 para subir el gráfico
auth = tweepy.OAuth1UserHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
media = api.media_upload(filename='media_horaria.png')
media_id = media.media_id

#creamos un cliente tweepy
cliente = tweepy.Client(bearer_token=bearer_token,
consumer_key=api_key,
consumer_secret=api_key_secret,
access_token=access_token,
access_token_secret=access_token_secret)

#hacemos la llamada para publicar, pero en esta ocasión con media
cliente.create_tweet(text='otra prueba, pero esta vez con gráfico',media_ids=[media_id])

Próximos pasos

Me he quedado con dos acciones :

  • No usar una librería externa y hacer llamadas directamente al API de twitter
  • Buscar un modo de subir el fichero con la v2 y no con la v1. Sospecho que en cualquier momento pueden meter alguna nueva limitación a la v1, y tener que rehacer los scripts de nuevo
  • ..y una tercera : tengo que añadir logs a los scripts para que me alerten si ha habido algún problema. Y así evitar estos 10 días sin publicar nada

Gracias a todos por los comentarios en twitter y los ánimos para seguir con estas tareas.

Descarga de datos del mercado eléctrico.

Jugar con los datos abiertos que se proporcionan en las diferentes fuentes de información de este mercado es una buena manera de intentar entenderlo. En mi cuenta de twitter publico diariamente gráficos generados con datos descargados desde estas fuentes. Es un mercado ciertamente complejo, con una regulación extensa, y con mucho ruido mediático. Todo esto facilita la opacidad y dificultad de entender este mercado, que por otra parte se lleva, y más con la subida de precios de estos tiempos, una parte material del presupuesto de servicios básicos de las familias. Mi intención, publicando estas líneas de código (por otra parte extremadamente simple) es ayudar un poco en hacerlo más transparente.

¿Como lo he organizado?

He preparado un notebook de Jupyter mostrando una serie de funciones, en Python, para facilitar la descarga de datos desde fuentes relacionadas con el mercado eléctrico:

He preparado cinco funciones:

  • catalogo_esios(token): que permite bajar el catálogo completo de la api de esios, para, posteriorment, buscar de manera fácil los identificadores que necesitamos para nuestro trabajo
  • download_esios : que permite bajar datos de cualquier indentificador, entre dos fechas determinadas, para posteriormente trabajar sobre ellos.
  • download_ree : idem que el caso anterir pero sobre apidatos de REE
  • download_gas : que nos permite bajar desde https://mibgas.es el precio de gas GDAES del día siguiente
  • downlaod_gas_rd: que nos permite bajar desde https://mibgas.es el precio de gas correspondiente al mecanismo de compensación del RD10/2022

A modo de caso práctico, he añadido un ejemplo de descarga de datos junto con un gráfico para mostrarlos visualmente. He procurado elegir tipos diferentes de gráficos para cada gráfico por si es de ayuda.

Aquí pueden encontrar el notebook.

Me alegraré mucho si alguien lo encuentra de utilidad…

Mercamadrid

Hemos preparado un código para bajar datos de la actividad comercial de mayoristas en Mercamadrid. Estos datos se pueden bajar desde este link del portal de datos abiertos del Ayuntamiento de Madrid.

La información esta estructura en una serie de campos tales como:

  • Fecha inicial del segmento de tiempo al que se refieren los datos
  • Fecha final del segmento de tiempo al que se refieren los datos
  • Descripción de la mercancia
  • Código de la mercancia
  • Origen de la mercancia
  • Código de este origen
  • Peso de la mercancia en Kilos
  • Precio mínimo registrado
  • Precio máximo registrado
  • Precio más frecuente

He intentado gestionar y minimizar el tamaño del pandas con el modelo propuesto por Matt Harrison, estoy haciendo un esfuerzo para seguir el «chaining» siempre que sea posible.

Presentamos el código necesario para bajar y preparar adecuadamente la información desde su repositorio en datos Madrid, y preparamos una rejilla de datos con los mismos..
En cada subgráfica, una por cada producto, presentamos la evolución del consumo como barras (eje «y» izquierda) )y la evolución de precios (eje «y» derecha). Para claridad se han codificado las barras según temperatura del mes..

Leyes lógicas

Logic Lane by Chris Andrews is licensed under CC-BY-SA 2.0

Vamos a enumerar las principales leyes lógicas que nos permiten trabajar sobre expresiones complejas con varias proposiciones. Básicamente son leyes que rigen la Lógica Proposicional. Las enumeramos agrupadas según el número de proposiciones, añadiendo un último bloque con las condicionales.

La lista de leyes está basada en el primer capítulo del libro «Lenguaje matemático: conjuntos y números» de los autores Miguel Delgado Pineda y María José Muñoz Bouzo.

Leer más »

Desde Bernouilli hasta la Exponencial

Imagen de Jakub Orisek en Pixabay

Introducción a la discusión

En este ejercicio vamos a estudiar como se relacionan modelos a priori estancos como un simple Bernouilli con la distribución exponencial. Como pensando en sucesos singulares, que se repiten en el tiempo, podemos llegar a entender la distribución de los tiempos de espera entre esos sucesos. Empecemos…

Leer más »

Inferencia Bayesiana vs Frecuentista

Introducción..un poco de teoría

En este trabajo vamos a estudiar las dos aproximaciones más conocidas en los métodos de inferencia estadística: el método bayesiano y el frecuentista. Un búsqueda rápida en Google confirma el gran número de interesantes discusiones al respecto. Personalmente me decanto por el Bayesiano, al final de este trabajo explicaré por qué.

Photo by Kaboompics .com on Pexels.com
Leer más »

Análisis de la variación del cambio Euro Dolar. Riesgo de cambio.

Photo by Karolina Grabowska on Pexels.com

Vamos a preparar un script que nos permita evaluar las variaciones que hay en los cambios de moneda, y nos de una idea de que riesgos estamos corriendo cuando fijamos los cambios. Las series históricas las sacamos de la libreria https://pypi.org/project/investpy/ (construída por Álvaro Bartolomé del Canto @alvarob96 at GitHub) que obtiene los datos de la web de información financiera http://www.investing.com

Leer más »

Forma de pensar Bayesiana

Imagen de moritz320 en Pixabay

Un recordatorio: el teorema de Bayes

Licencia : https://creativecommons.org/licenses/by-nc-sa/4.0/

Empecemos con el uso «estandar» del Teorema. Lo vamos a aplicar a un problema clásico, el de las bolsas con bolas de colores:

Sean dos bolsas indistinguibles, la primera, llamémosla bolsa 1, tiene 4 bolas verdas y una bola roja, la segunda, llamémosla bolsa 2, tiene 2 bolas verdes y tres bolas rojas. Se elije al azar una de las bolsas y obtenemos una bola verde, ¿qué probabilidad hay de que esta venga de la bolsa 1?

Leer más »