Cree la API de GitHub para obtener la imagen del perfil del usuario y la cantidad de repositorios usando Python y Flask

GitHub es donde los desarrolladores dan forma al futuro del software, juntos, contribuyen a la comunidad de código abierto, administran repositorios de Git, etc. Es una de las herramientas más utilizadas por un desarrollador y su perfil se comparte para mostrar o permitir que otros contribuyan a su proyectos Web Scraping usando python también es uno de los mejores métodos para obtener datos.

En este artículo, crearemos una API para obtener la imagen de perfil de un usuario y sus seguidores. El siguiente es el flujo en el que este blog guiaría para crear una API:

  • Configuración del directorio de aplicaciones
  • Datos de Web Scrape de GitHub.
    • Se usaría Beautiful Soup en Python.
  • Crear una API.
    • Se utilizaría matraz.

Configuración del directorio de aplicaciones

Paso 1: crea una carpeta (p. ej., GitHubGFG).

Paso 2: configurar el entorno virtual. Aquí creamos un entorno .env

python -m venv .env

Paso 3: Activar el entorno.

.env\Scripts\activate

Raspado de datos

Paso 1: en Python, tenemos Beautiful Soup, que es una biblioteca para extraer datos de archivos HTML. Para instalar Beautiful Soup, ejecute un comando simple;

pip install beautifulsoup4

Paso 2: Instale el módulo de Requests de Python. Requests permite enviar requests HTTP/1.1 de forma extremadamente sencilla.

pip install requests

Crea un archivo python. (por ejemplo: github.py)

Paso 3: Los siguientes son los pasos para extraer datos de la página web. Para obtener el texto HTML de la página web;

github_html = requests.get(f'https://github.com/{username}').text

El {nombre de usuario} tendrá el nombre de usuario de GitHub del usuario requerido. Para representar el objeto analizado como un todo, usamos el objeto BeautifulSoup,

soup = BeautifulSoup(github_html, "html.parser")

Ejemplo:

Python3

from bs4 import BeautifulSoup
import requests
 
username = "kothawleprem"
 
github_html = requests.get(f'https://github.com/{username}').text
soup = BeautifulSoup(github_html, "html.parser")
print(soup)

Producción:

Ahora busque la clase de avatar en el documento HTML, ya que tiene la URL requerida para la imagen de perfil.

find_all(): El método find_all() examina los descendientes de una etiqueta y recupera todos los descendientes que coinciden con los filtros. Aquí nuestro filtro es una etiqueta img con la clase como avatar.

Python3

avatar_block = soup.find_all('img',class_='avatar')
print(avatar_block)

El siguiente es el resultado de avatar_block:

La URL de la imagen está en el atributo src, para obtener el texto de la URL, use .get():

Python3

img_url = avatar_block[4].get('src')
print(img_url)

El siguiente es el resultado de img_url:

Busque la primera clase Counter en el documento HTML, ya que tiene los datos necesarios para la cantidad de repositorios.

find(): El método find() examina los descendientes de una etiqueta y recupera un único descendiente que coincida con los filtros. Aquí nuestro filtro es una etiqueta de intervalo con la clase como Contador.

repos = soup.find('span',class_="Counter").text

El código completo sería el siguiente:

Python3

from bs4 import BeautifulSoup
import requests
 
username = "kothawleprem"
 
github_html = requests.get(f'https://github.com/{username}').text
soup = BeautifulSoup(github_html, "html.parser")
avatar_block = soup.find_all('img',class_='avatar')
img_url = avatar_block[4].get('src')
repos = soup.find('span',class_="Counter").text
 
print(img_url)
print(repos)

Producción:

https://avatars.githubusercontent.com/u/59017652?v=4
33

Creando la API

Usaremos Flask, que es un marco micro web escrito en Python.

pip install Flask

El siguiente es el código de inicio para nuestra aplicación de matraz.

Python3

# We import the Flask Class, an instance of
# this class will be our WSGI application.
from flask import Flask
 
# We create an instance of this class. The first
# argument is the name of the application’s module
# or package.
# __name__ is a convenient shortcut for
# this that is appropriate for most cases.This is
# needed so that Flask knows where to look for resources
# such as templates and static files.
app = Flask(__name__)
 
# We use the route() decorator to tell Flask what URL
# should trigger our function.
@app.route('/')
def github():
    return "Welcome to GitHubGFG!"
 
# main driver function
if __name__ == "__main__":
   
    # run() method of Flask class runs the
    # application on the local development server.
    app.run(debug=True)

Abra localhost en su navegador: 

Obtener el nombre de usuario de GitHub de la URL:

Python3

from flask import Flask
 
app = Flask(__name__)
 
@app.route('/<username>')
def github(username):
    return f"Username: {username}"
 
if __name__ == "__main__":
    app.run(debug=True)

Producción: 

Ahora agregaríamos nuestro código de Web Scrapping y algunos métodos de ayuda proporcionados por Flask para devolver correctamente los datos JSON. jsonify es una función en Flask. Serializa datos en formato de notación de objetos de JavaScript (JSON). Considere el siguiente código:

Python3

import requests
from bs4 import BeautifulSoup
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/<username>')
def github(username):
    github_html = requests.get(f'https://github.com/{username}').text
    soup = BeautifulSoup(github_html, "html.parser")
    avatar_block = soup.find_all('img',class_='avatar')
    img_url = avatar_block[4].get('src')
    repos = soup.find('span',class_="Counter").text
     
    # Creating a dictionary for our data
    result = {
        'imgUrl' : img_url,
        'numRepos' : repos,
    }
    return result
 
if __name__ == "__main__":
    app.run(debug=True)

Producción:

Si el nombre de usuario no es correcto o por cualquier otro motivo, debemos agregar nuestro código en el bloque de prueba y excepción para manejar las excepciones. El código final sería el siguiente:

Python3

import requests
from bs4 import BeautifulSoup
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/<username>')
def github(username):
    try:
        github_html = requests.get(f'https://github.com/{username}').text
        soup = BeautifulSoup(github_html, "html.parser")
        avatar_block = soup.find_all('img',class_='avatar')
        img_url = avatar_block[4].get('src')
        repos = soup.find('span',class_="Counter").text
        # Creating a dictionary for our data
        result = {
            'imgUrl' : img_url,
            'numRepos' : repos,
        }
    except:
        result = {
            "message": "Invalid Username!"
        }, 400
    return result
 
if __name__ == "__main__":
    app.run(debug=True)

Publicación traducida automáticamente

Artículo escrito por kothawleprem y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *