API No Oficial en Python para recopilar los threads de perfiles de usuario y analizar la data correspondientes.
threads_api.py
: Contiene el script de conexión a Threads realizando ingeniería inversa. Leer aviso legalget_user_profile_threads.py
: Permite obtener los threads de un usuario en particular. Este código puede ser usado de forma individual o como interfaz para otras implementaciones.getData.py
: Permite obtener los threads, limpiarlos, procesarlos, incluirlos en un dataframe para su exploración y exportar la data en un archivo csv.threads.ipynb
: Es una implementación que muestra el uso de la data exportada lista para trabajarla con cualquier API.ai-samples
: Notebooks con implementaciones de modelos de procesamiento de lenguaje natural para el análisis de sentimientos con la data extraída del API.text-analytics.ipynb
: Notebook para realizar análisis de sentimientos con la data extraída degetData
y procesada porthreads.ipynb
.mined-opinions.ipynb
: Notebook para realizar minado de opiniones con la data extraída degetData
y procesada porthreads.ipynb
.
data
: Es la carpeta que almacena el archivo generado al trabajar con el archivogetData.py
.
El script realiza las siguientes acciones:
- Se conecta a una API
threads_api.py
y obtiene una lista de threads de un perfil de usuario utilizando la funciónget_user_profile_threads
del móduloget_user_profile_threads
. - Procesa estos threads y limpia el texto eliminando una serie de caracteres específicos.
- Separa y recopila los datos de "me gusta" de los threads.
- Almacena la información procesada en un DataFrame de Pandas.
- Exporta el DataFrame a un archivo CSV para su posterior análisis.
Este script se ejecuta desde la línea de comandos de la siguiente manera:
python <get_user_profile_threads>.py
Este script depende de los siguientes paquetes de Python:
- asyncio
- pandas
Para instalar estas dependencias, puede usar el siguiente comando:
pip install pandas asyncio
from get_user_profile_threads import get_user_profile_threads
import asyncio
import pandas as pd
Importamos las bibliotecas y funciones necesarias para el script. Esto incluye get_user_profile_threads
(una función personalizada que debe estar definida en un archivo en el mismo directorio), así como las bibliotecas estándar de Python asyncio
y pandas
.
threads_data = asyncio.run(get_user_profile_threads())
Recoge los datos de los threads del perfil de un usuario utilizando una función asíncrona.
if threads_data is not None:
cleanThreads = []
likesData =[]
chars = ['"', "'", '}', '{', 'text', '\n', ':', '\'', '\"']
Si threads_data
no está vacío, el script crea dos listas vacías, cleanThreads
y likesData
. La lista chars
define los caracteres que se eliminarán del texto del thread.
El siguiente bloque de código procesa cada thread en threadsData
, limpia el texto y recoge los datos de "me gusta".
for thread in threadsData:
for char in chars:
thread = str(thread).lstrip(' ')
thread = str(thread).replace(char, '').lstrip('"\'')
if ', likes' in thread:
split_data = thread.split(', likes')
cleanThreads.append(split_data[0])
likesData.append(split_data[1])
else:
cleanThreads.append(thread)
likesData.append('0')
df = pd.DataFrame({
'Text': cleanThreads,
'Likes': likesData
})
Se crea un DataFrame de Pandas con los datos de texto limpios y los "me gusta".
df['Text'] = df['Text'].replace('\\\\n', '', regex=True)
df['Text'] = df['Text'].replace('\\\\n\\\\n', '', regex=True)
Eliminamos los valores nulos del dataframe con drop.na()
, luego creamos una expresión regular para eliminar los saltos de línea \n
y los saltos de línea dobles consecutivos \n\n
df.to_csv('./data/data.csv', index=False,header=False)
Por último, el script exporta el DataFrame a un archivo CSV, sin índice ni encabezado, para su posterior análisis, en el archivo threads.ipynb
Esta biblioteca actualmente tiene espacios reservados para las clases Extensions, Thread, y ThreadsUser y no realiza ninguna comprobación de errores o limitación de velocidad. Debes asegurarte de que tienes permiso para acceder a cualquier dato que solicites y manejar cualquier error devuelto por la API de threads.net.
Este proyecto es puramente educativo. Se trata de una implementación de la versión 1.0.4 del proceso de ingeniería inversa realizado por el usuario Daniel 1 en su repositorio en GitHub.
La base de este trabajo proviene de la documentación proporcionada en el blog Intuitive Explanations sobre ingeniería inversa, descrita en el artículo "Reverse Engineering the Facebook Messenger API".
De acuerdo con el artículo, la ingeniería inversa es ética, pro-democrática y está protegida bajo la ley de Estados Unidos, pero aún es necesario ejercer integridad y responsabilidad al interactuar con cualquier sistema en línea. El comportamiento irresponsable, como enviar spam a otros usuarios, descargar datos de las personas sin su consentimiento o poner una carga indebida en la infraestructura que no estás pagando, es inapropiado independientemente de cómo se logre.
La ingeniería inversa, cuando se usa correctamente, es una forma de dar a uno mismo y a otros una mayor agencia, libertad y creatividad en línea. Sin embargo, Facebook a menudo suspende o prohíbe automáticamente a las personas que interactúan con su API de una manera que les parece sospechosa, incluso si no están haciendo nada malo. Por lo tanto, se recomienda explorar con precaución.
Para más detalles y para entender el proceso de ingeniería inversa llevado a cabo, recomendamos leer el artículo completo en Intuitive Explanations.
El propósito de este proyecto es ayudar a las personas a entender cómo funcionan las aplicaciones y los sistemas, y no se debe usar para violar la privacidad de otros usuarios ni abusar de las infraestructuras de sistemas ajenos. Los desarrolladores no se hacen responsables del mal uso de este código.
¿Encontraste una mejora que se puede implementar o te gustaría solicitar un cambio? Puedes abrir un Issue solicitando el cambio o enviar directamente un Pull Request con tu cambio.
Para cualquier duda o aclaración, puedes contactarme Fernanda Ochoa:
Email: fochoa@daliaempower.com | monsh8a@gmail.com
Twitter: @imonsh
Instagram: @fherz8a
Derechos de autor (c) 2023 Fernanda Ochoa
Este código está sujeto a la licencia MIT que se muestra arriba. Al utilizar este código, aceptas dar crédito al autor original mencionando su nombre en el código y en cualquier documentación relacionada con el proyecto.