diff --git a/README.md b/README.md index a57af5d..e3404d0 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ El paquete pip y sus sucesores pip3, ya no permiten realizar `pip search` Este proyecto es para permitir buscar un paquete y obtener información del mismo -## Busqueda +## Busqueda `pip_busca` El programa `pip_busca` localiza en la bbdd de internet todos los paquetes que cumplan con el trozo de cadena indicada en la busqueda. -## Información +## Información `pip_busca` El programa `pip_info` obtiene la información relevante del paquete indicado, el nombre debe de ser coincidente. diff --git a/REAME.md b/REAME.md deleted file mode 100644 index a57af5d..0000000 --- a/REAME.md +++ /dev/null @@ -1,18 +0,0 @@ -# Busqueda PIP - -El paquete pip y sus sucesores pip3, ya no permiten realizar `pip search` - -Este proyecto es para permitir buscar un paquete y obtener información del mismo - -## Busqueda - -El programa `pip_busca` localiza en la bbdd de internet todos los paquetes que cumplan con el trozo de cadena indicada en la busqueda. - -## Información - -El programa `pip_info` obtiene la información relevante del paquete indicado, el nombre debe de ser coincidente. - -Este script, no admite busquedas o comodines. Para localizar el paquete deseado use `pip_busca` - ---- - diff --git a/pip_busca b/pip_busca new file mode 100644 index 0000000..0bbbc12 --- /dev/null +++ b/pip_busca @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +''' +Author: LuisGuLo +Release: v1.6 +ChangeLog: + v1.6: Peticion simple y extraccion + v1.5: browsers de consola y dumps + v1.4: Uso de requests-html + v1.3: Modulos y venv + v1.2: Peticion con user-agent + v1.1: Peticion web mediante query + v1.0: PoC inicial bash. Cambio a python. +''' +import sys +import requests +from bs4 import BeautifulSoup + +def mostrar_ayuda(): + print("Uso: ./pip_busca ") + print("\nBusca paquetes en PyPI cuyo nombre contenga la cadena indicada.") + print("Ejemplo: ./pip_busca ansi") + +if len(sys.argv) < 2 or sys.argv[1] in ["--help", "-h"]: + mostrar_ayuda() + sys.exit(0) + +busqueda = sys.argv[1].lower() +url = "https://pypi.org/simple/" + +try: + response = requests.get(url) + response.raise_for_status() +except requests.RequestException as e: + print(f"❌ Error al conectar con PyPI: {e}") + sys.exit(1) + +soup = BeautifulSoup(response.text, "html.parser") +paquetes = [a.text for a in soup.find_all("a")] +coincidentes = [p for p in paquetes if busqueda in p.lower()] + +print(f"\n🔍 Paquetes que contienen '{busqueda}':\n") +if not coincidentes: + print("❌ No se encontraron coincidencias.") +else: + for nombre in coincidentes: + print(f"📦 {nombre}") + diff --git a/pip_info b/pip_info new file mode 100644 index 0000000..1e327ea --- /dev/null +++ b/pip_info @@ -0,0 +1,90 @@ +#!/bin/bash +: ' --- + Author: Luis GuLo + Release: 1.3 + Changelog: + 1.3: Mostrar version Python requerida + 1.2: Ayuda + Mostrar por defecto 10 ultimas versiones disponibles, con opcion a todas + 1.1: Compactar salida de todas las versiones disponibles + 1.0: Localizar paquete y mostrar ultima version + disponibles +---' + +mostrar_ayuda() { + echo "--------------------------------------------------------------------------------" + echo "Uso: $0 [--all]" + echo "" + echo "Opciones:" + echo " --all Muestra todas las versiones disponibles (incluye alphas, betas, etc.)" + echo "" + echo "Por defecto, se muestran las últimas 10 versiones estables." + echo "Nota: Se indica entre paréntesis la version de Python requerida" + echo "--------------------------------------------------------------------------------" +} + +# Verifica si se pidió ayuda +if [[ "$1" == "--help" || "$1" == "-h" ]]; then + mostrar_ayuda + exit 0 +fi + +# Verifica que se haya pasado un nombre de paquete +if [ -z "$1" ]; then + echo "❌ Error: Debe indicar el nombre del paquete." + mostrar_ayuda + exit 1 +fi + +PAQUETE="$1" +# Verificar orden: paquete + opcion +if [ "$PAQUETE" == "--all" ] ; then + echo "❌ Error: Orden en sintaxis obligatoria." + mostrar_ayuda + exit 0 +fi + +URL="https://pypi.org/pypi/$PAQUETE/json" +RESPUESTA=$(curl -s "$URL") + +# Verifica si la respuesta contiene información válida +if echo "$RESPUESTA" | grep -q '"info"'; then + NOMBRE=$(echo "$RESPUESTA" | jq -r '.info.name') + VERSION=$(echo "$RESPUESTA" | jq -r '.info.version') + DESCRIPCION=$(echo "$RESPUESTA" | jq -r '.info.summary') + echo "📦 Paquete: $NOMBRE" + echo "🔢 Última versión: $VERSION" + echo "📝 Descripción: $DESCRIPCION" + +# echo -e "\n📚 Versiones disponibles:" + +mostrar_versiones() { + echo "$RESPUESTA" | jq -r '.releases | to_entries[] | "\(.key) \(.value[0].requires_python // "N/A")"' \ + | grep -E '^[0-9]+\.[0-9]+\.[0-9]+ ' \ + | sort -k1 -V -r \ + | head -n 10 \ + | awk '{printf "%s (%s) ", $1, $2}' + echo +} + +mostrar_todas_versiones() { + echo "$RESPUESTA" | jq -r '.releases | to_entries[] | "\(.key) \(.value[0].requires_python // "N/A")"' \ + | sort -k1 -V -r \ + | awk '{printf "%s (%s) ", $1, $2}' + echo +} + + if [[ "$2" == "--all" ]]; then + echo -e "\n📚 Versiones disponibles:" + #echo "$RESPUESTA" | jq -r '.releases | keys[]' | sort -V -r | xargs + mostrar_todas_versiones + else + echo -e "\n📚 Ultimas 10 Versiones estables disponibles:" + #echo "$RESPUESTA" | jq -r '.releases | keys[]' \ + # | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \ + # | sort -V -r \ + # | head -n 10 \ + # | xargs + mostrar_versiones + fi +else + echo "❌ No se encontró información para el paquete '$PAQUETE'" +fi