Un rincón para hablar de tecnología y todo lo que se me pase por la Cabeza

🦋 Expansión de trends en BlueSky

El otro día usando BlueSky vi a un mutual quejándose de los "trends" de esta nueva red social, más que nada por el contenido de alguno de estos. Obviamente en este post no me voy a poner a hablar sobre ese tipo de contenido, pero lo que sí que me pareció interesante es ver cómo se propagan esos trends.

Solo por aclararlo, por trend me refiero a una cadena de posts, que citan a otros posts con una misma temática: ya sea para poner imágenes de lo que sea, para decir a qué ciudades has ido o cualquier cosa que se le ocurra a un usuario de BlueSky.

Esto realmente no es que sea nuevo, es básicamente lo mismo que pasaba en Twitter, pero con una pequeña diferencia, que en BlueSky se puede obtener información para analizar esto pero sin tener que pagar un duro.

Obtención de Datos

Como quería ver el tema de los trends, así que lo que hice lo que era más lógico: ir a los perfiles de mis mutuals de confianza y ver en cuales habían participado. Así que bueno con eso ya he partido con unos cuantos trends distintos, no muchos: como unos cinco, pero para esto es más que suficiente.

Básicamente lo que quiero hacer ahora mismo es:

  1. Obtener el post original
  2. Ver las quotes
  3. Ver las quotes de las quotes
  4. Ver las quotes de las quotes de las quotes
  5. ...

Básicamente para poder ver cómo se expanden estos trends. Lo que cuento de la API de BlueSky no es que sea necesario para esto, así que puedes ir a la sección de Vamos al lío si no te interesa lo siguiente.

API de BlueSky

Afortunadamente para gente como yo, BlueSky tiene una API gratuita y según he visto bastante permisiva para hacer bastantes cosas: Documentación de la API. Así que esta mañana me ha dado por usarla, a ver qué tal iba.

Realmente fue algo sencillo, un poco extraño que no te hagan crear una key, y con eso haces el login, sino que directamente tienes que poner el usuario y la contraseña. No soy muy fan de ello, pero tampoco he venido a quejarme de eso.

Usando la API

Para encontrar el root, podría estar clickando hasta llegar al final, así que lo lógico teniendo la API fue, ir post a post viendo cual habían citado hasta encontrar el último (hay funciones que hice yo pero os imagináis lo que hacen):

def find_root_post(starting_post):
    current_post = starting_post
    while current_post.embed is not None and current_post.embed.py_type in ["app.bsky.embed.record#view", "app.bsky.embed.recordWithMedia#view"]:
        if current_post.embed.py_type == "app.bsky.embed.record#view":
            uri = current_post.embed.record.uri
        else:
            uri = current_post.embed.record.record.uri

        search_posts = get_post_by_uri(uri).posts
        if len(search_posts) > 0:
            current_post = search_posts[0]
        else:
            break 

Un poco de rant por mi parte aquí, ¿por qué ponen la estructura distinta si viene con imagen? Un poco innecesario que record venga dentro de otro campo record que solo lleve eso, pero bueno. Al final la API de BlueSky devuelve las cosas como las devuelve, pero no entiendo muy bien el por qué de eso, lo tendrá, pero me parece un poco estúpido de primeras.

En fin, el código es algo meh, pero funciona para lo que quiero. Tiene por ahí algunos sleeps para evitar bombardear la API (eso está feo en general, no lo hagáis🫵). Al final obtengo el post principal, el que lo comenzó todo. En algunos casos para obtener el post raíz he tenido que viajar como 20 posts, comenzando desde un punto "random", por así decirlo.

Luego, para obtener los posts citados, pues se hace un poco de lo mismo, viva la recursión y esas cosas. Aquí lo único importante es que reviso cuántos quotes tiene un post, si es 0 evito mandar más solicitudes por ese lado.

def obtain_all_posts_from_root(root, start=False, csv_path="output.csv"):
    if start:
        save_post_info(root, csv_path=csv_path)
    quotes = get_quotes_of_post(root)
    for post in quotes.posts:
        save_post_info(post, csv_path=csv_path)
        if post.quote_count > 0:
            obtain_all_posts_from_root(post, csv_path=csv_path)

Estructura o grafo de los trends

Con los datos que he obtenido tengo básicamente dos cosas de cada post:

  1. El identificador del post
  2. El identificador del post que cita

Al final toda la información es así, solo la raíz no tiene post que cita, así que como es lógico, para ver este tipo de cosas hay que usar grafos. Y dentro de los grafos, los direccionales (para que tengan flechita ➜).

Yo la verdad es que no tengo tanta idea de grafos, algo he tenido que aprender últimamente, así que bueno, más razón para trastear con ellos.

Así que vamos a ver qué he estado mirado, he cogido el trend de la "mochila", que yo mismo participé: Trend de la mochila

Antes de seguir, no, no son 6 cosas, son 5, la libreta y boli vienen en pack!

Para mi sorpresa, cuando vi el post original, no solo estaba en inglés, sino que solo tenía dos citados:

Trend de la mochila original

Realmente, esto nos muestra ya dos cosas interesantes:

  1. Incluso si el post original apenas tiene engagement este trend se puede llegar a expandir por las timelines de la gente.
  2. Lo sensible que son estos "trends", porque si al post de arriba no lo cita la persona correcta, al final yo ni nadie hubiese participado.

Vamos al lío

Ahora os voy a mostrar la estructura del grafo del trend de arriba justamente, ahora os explico cada cosa.

grafo

Lo primero de todo, cada nodo (o bolita) representa un post, y la fechita apunta al post que se está citando.

Luego, he pintado de rojo el post original. Si observáis, solo hay dos nodos que lo apuntan. Entonces, por el lado de la derecha solo hubo una quote, y ese post a su vez no consiguió ningún citado. Sin embargo, por el otro lado, se ha generado el resto del grafo.

Ahora bien, he pintado también el indegree de cada nodo (lo siento no sé cómo es en español). Esto básicamente dice cuántos nodos apuntan a un nodo, esto se ha pintado desde un morado/azul a un amarillo. Al final esto nos dice qué posts han tenido más citas, y que por lo tanto más han podido ramificar la expansión del grafo. Como veis hay dos posts en amarillo, que son los que más flechitas tienen.

También fijaos un poco que hay como dos lados que se forman desde el punto amarillo que está más cerca del origen. Una parte como hacia arriba y otra hacia abajo. El trend al final ha cogido estos dos caminos distintos.

También he puesto el "camino más largo" que se forma (los nodos tienen como el borde rosita), que en este caso son 25 posts, aunque la verdad es que podría bastante más. Y así como curiosidad, yo formo parte de ese camino, siendo el post número 24~holaaa.

Otros ejemplos

Al final cada trend se va a compartir de una forma u otra, muchas veces será el post original el que más engagement tenga y el que directamente ramifique todo.

Hay casos de estructuras con muchísimos más posts, tipo esta, que la raíz sí que tuvo bastante citados (para lo que es BlueSky), pero no fue lo que detonó el trend como tal.

Otros posts lo mismo sí que consiguen una cadena larga de gente citando a otra, pero no hay realmente mucho crecimiento porque poca gente cita cada post:

Crecimiento respecto al tiempo

Una parte muy relevante es, cómo de rápido aparecen y se expanden estos trends por las feeds. Pongamos el ejemplo del trend de la mochila.

Realmente esto por limitaciones lo subo como un GIF, pero creo que se ve bien, pone justo la hora arriba y se repite.

Al final este crecimiento es algo curioso, porque parece que crece, se estanca, crece muchísimo, y se vuelve a estancar creciendo muy poco a poco. Sin embargo, esto no tiene por qué ser generalmente así siempre.

Hay otros crecimientos que son mucho más interesantes, tipo el siguiente:

Sí, el vídeo está bien. Al parecer el post este se publicó el 17 de octubre, pero hasta mediados de noviembre no tuvo citados. Bueno, me imagino que alguien le dio por usar el buscador para buscar este trend (era uno de los que puse arriba).

Hay otros que realmente sí que parece que se expanden más regularmente, pero luego sí que se van expandiendo más hacia otros lados.

Conclusiones y What's next?

Realmente el tema de los trends como crecen y cómo se expanden parece interesante ¿es útil?, pues creo que para este tipo de tuits no mucho, pero al menos me he entretenido un poco haciendo esto.

Lo que haré después, pues ahora mismo no sé, pero me gustaría seguir viendo cosas del estilo y aplicar grafos a redes sociales, así que lo mismo el siguiente post también hago cosas de BlueSky 🦋.

#2024 #grafos #redes sociales #trends