La semana pasada presenté un post con un script para extraer datos de publicaciones de Hive. Esto con el fin de automatizar tareas para la creación de post de curación. Este script lo he usado durante toda la semana y la verdad que me hecho ahorrar tiempo significativo.
El script sólo recibía enlaces de https://ecency.com, lo que resultaba una limitante para usuarios que usan el servicio de https://peakd.com, siendo esta última la interfaz más usada por los usuarios de hive.
He realizado unos cambios al script con una solución muy sencilla al problema. Usando el método ecency_url = url.replace('peakd.com', 'ecency.com')
, lo que hace es remplazar todas las apariciones de 'peakd.com' por 'ecency.com', guardando toda la cadena de texto en una nueva variable ecency_url, para que se ejecute el ciclo for extrayendo todos los datos de los enlaces ecency.com. Además en pantalla se imprime el enlace original suministrado por el usuario.
Con este simple cambio, se le puede dar al script enlaces peakd.com y enlaces ecency.com y seguiría devolviendo una respuesta válida.
Código fuente:
import requests
from bs4 import BeautifulSoup
contador = 0
# Abrir el archivo de texto para escribir la salida
with open('salida.txt', 'w') as file:
# Leer los enlaces desde un archivo de texto
with open('enlaces.txt', 'r') as f:
enlaces = [line.strip() for line in f]
for url in enlaces:
contador += 1
# Reemplazar 'peakd.com' por 'ecency.com' en el enlace si es necesario
ecency_url = url.replace('peakd.com', 'ecency.com')
response = requests.get(ecency_url)
soup = BeautifulSoup(response.content, 'html.parser')
try:
# Obtener el nombre de usuario
username = soup.find('span', class_='author-name').text.strip()
# Obtener el título del artículo
title = soup.find('meta', property='og:title')['content']
# Obtener la URL de la imagen principal
image_url = soup.find('meta', property='og:image')['content']
# Escribir la salida en el archivo de texto
file.write(f"""
#### Post #{contador}
---
{image_url}
---
[{title}]({url})
by @{username}
---
""")
# Imprimir la salida en la consola
print(f"""
#{contador}
Usuario: {username}
Título del Post: {title}
Url de la imagen: {image_url}
---
""")
# Escribir el enlace original en la salida
print(f"Original Link: {url}\n")
except Exception as e:
# Manejar los errores y escribirlos en el archivo de texto
print(f"Error procesando el enlace {ecency_url}: {e}\n")
print("La salida se ha generado exitosamente en el archivo 'salida.txt'")
Salida de ejemplo:
Para más información ir al post.
Espero que le sea de utilidad. Puede clonar el código fuente desde los repositorios de Github para su libre uso. Ver aquí. Allí obtendrá información adicional para instalación del entorno virtual e instalación de bibliotecas. Cualquier comentario o aporte para el código es bienvenido.
Las imágenes son mías o capturas de pantalla tomadas por mí, a menos que se indiquen fuentes externas.
Discord: alberto0607#6813
Twitter: Twitter