World Wide Web tiene grandes cantidades de datos disponibles que crecen constantemente tanto en cantidad como en forma fina. La API de Python nos permite recopilar datos/información de interés de la World Wide Web. La API es una herramienta muy útil para científicos de datos, desarrolladores web e incluso cualquier persona ocasional que quiera encontrar y extraer información mediante programación.
API frente a web scraping
Bueno, la mayoría de los sitios web proporcionan API para compartir datos en un formato estructurado, sin embargo, normalmente restringen los datos que están disponibles y también pueden poner un límite a la frecuencia con la que se puede acceder a ellos. Además, un desarrollador de sitios web puede cambiar, eliminar o restringir la API de back-end.
Por otro lado, hay sitios web que no proporcionan API para compartir los datos. El equipo de desarrollo del sitio web en cualquier momento puede cambiar, eliminar o restringir la API de back-end. En resumen, no podemos confiar en las API para acceder a los datos en línea que deseemos. Por lo tanto, es posible que debamos confiar en técnicas de web scraping.
Versión de Python
Cuando se trata de una API efectiva, Python suele ser el lenguaje de programación elegido. Es un lenguaje de programación fácil de usar que tiene un ecosistema muy rico de herramientas para muchas tareas. Si programa en otros lenguajes, le resultará fácil retomar Python y es posible que nunca regrese.
La Python Software Foundation ha anunciado que Python 2 dejará de desarrollarse y admitirse gradualmente en 2020. Por este motivo, utilizaremos Python 3 y el cuaderno Jupyter en la publicación. Para ser más específicos, mi versión de python es:
Python3
from platform import python_version print(python_version())
3.6.10
Estructura del sitio web de Target
Antes de intentar acceder al contenido de un sitio web mediante API o rastreo web, siempre debemos comprender la estructura de nuestro sitio web de destino. El mapa del sitio y el archivo robots.txt de un sitio web nos ayudan con información vital además de herramientas externas como la Búsqueda de Google y WHOIS.
Validación del archivo robots.txt
Bueno, los sitios web (la mayoría de ellos) definen un archivo robots.txt para informar a los usuarios sobre las restricciones al acceder a su sitio web. Sin embargo, estas restricciones son solo pautas y recomendamos encarecidamente respetar sus pautas. Siempre debe validar y respetar los contenidos dentro de robots.txt para comprender la estructura del sitio web y minimizar la posibilidad de ser bloqueado.
El archivo robots.txt es un recurso valioso para validar antes de tomar la decisión de escribir un programa de rastreo web o usar una API.
Entendiendo el problema
En esta publicación, ahora reúna los repositorios de JavaScript con las estrellas más altas de Developers Facebook, conocido como Github, así que primero permítanme revisar su archivo robots.txt.
El siguiente contenido (solo las primeras líneas) proviene del archivo robots.txt del sitio web: https://github.com/robots.txt .
Del archivo está claro, Github quiere usar su contenido usando una API. Una forma de resolver nuestro problema es poniendo nuestros criterios de búsqueda en el cuadro de búsqueda de Github y presionando enter, sin embargo, es una actividad manual.
Afortunadamente, Github expone esta capacidad de búsqueda como una API que podemos consumir desde nuestras propias aplicaciones. La API de búsqueda de Github nos da acceso a la función de búsqueda integrada. Esto incluye el uso de operadores lógicos y de alcance, como «o» y «usuario».
Antes de pasar al código, hay algo que debe saber sobre los repositorios públicos, los repositorios privados y las restricciones de acceso. Los repositorios públicos suelen estar abiertos al público sin restricciones, mientras que los repositorios privados están restringidos solo a los propietarios y los colaboradores que ellos elijan.
Paso 1: Validación con cURL.
Ahora validemos rápidamente el acceso a Github antes de esforzarnos en escribir una API. Entonces, para hacer eso, cURL, una herramienta HTTP simple de línea de comandos, encaja perfectamente. cURL generalmente se instala en la mayoría de las máquinas Linux; de lo contrario, puede hacerlo fácilmente usando. – mmm instalar rizo
Para Windows, obtenga una copia de » https://curl.haxx.se/download.html «.
Ahora ejecute el comando como se muestra a continuación:
La cURL nos ha dado mucha información:
- HTTP/1.1 200 OK – código Cuando la URL de destino de su solicitud y los parámetros asociados sean correctos, GitHub responderá con un estado 200 (Éxito).
- X-RateLimit-Limit : el número máximo de requests que puede realizar por hora.
- X-RateLimit-Remaining : la cantidad de requests restantes en la ventana de límite de velocidad actual.
- X-RateLimit-Reset : la hora a la que se restablece la ventana de límite de velocidad actual en segundos de época UTC.
- “ repository_search_url ”: Este es el que usaremos en esta publicación para consultar los repositorios.
Paso 2: Autenticación
Por lo general, hay un par de formas de autenticarse al realizar una solicitud a la API de Github: usar nombre de usuario y contraseñas (HTTP básico) y usar tokens OAuth. Los detalles de autenticación no se cubrirán en esta publicación.
Dado que Github nos permite acceder al contenido público sin ninguna autenticación, nos limitaremos a buscar repositorios públicos sin API. Significa que vamos a escribir una API que no requiere autenticación, por lo que solo buscaremos en repositorios públicos.
Paso 3: Respuesta de Github con Python
Python3
# 1 - imports import requests # 2 - set the siteurl site_url = 'https://api.github.com/search/repositories?q=language:javascript&sort=stars' # 3 - set the headers headers = {'Accept': 'application/vnd.github.v3+json'} # 4 - call the url with headers and save the response response = requests.get(site_url, headers=headers) # 5 - Get the response print(f"Response from {site_url} is {response.status_code} ")
Producción:
Comenzamos con la importación de requests (si falta la instalación usando requests de instalación de pip) y luego asignamos una variable site_url con la URL de nuestro interés. Si desea buscar repositorios de JavaScript con una clasificación (descendente) en estrellas máximas.
Github se encuentra actualmente en la tercera versión de su API, por lo que definió encabezados para la llamada API que solicitan explícitamente usar la tercera versión de la API. No dude en consultar siempre la última versión aquí: https://docs.github.com/en/free-pro-team@latest/developers/overview/about-githubs-apis .
Luego llame a get() y pásele site_url y el encabezado, el objeto de respuesta se asigna a la variable de respuesta. La respuesta de Github siempre es un JSON. El objeto de respuesta tiene un atributo status_code, que indica si la respuesta es exitosa (200) o no.
Paso 4: Convertir la respuesta JSON al diccionario de Python
Python3
response_json = response.json() print(f"keys in the Json file : {response_json.keys()}") print(f"Total javascript repositories in GitHub : {response_json['total_count']}" )
Producción:
Como se mencionó anteriormente, la respuesta es JSON. Nuestro JSON tiene tres claves de las cuales podemos ignorar «incomplete_results» para una API tan pequeña. Una salida del programa mostró el total de repositorios en Github devueltos para nuestra búsqueda con response_json[‘total_count’].
Paso 5: Mirando nuestro primer repositorio
Python3
repositories = response_json['items'] first_repo = repositories[0] print(f"Output \n *** Repository information keys total - {len(first_repo)} - values are -\n") for keys in sorted(first_repo.keys()): print(keys) print(f" *** Repository name - {first_repo['name']}, Owner - {first_repo['owner']['login']}, total watchers - {first_repo['watchers_count']} ")
Producción:
El código anterior se explica por sí mismo. Lo que estamos haciendo es mostrar todas las claves dentro del diccionario y luego mostrar información en nuestro primer repositorio.
Paso 6: Bucle para obtener más…
Hemos mirado un repositorio, para que sea más obvio que necesitamos pasar por el bucle.
Python3
for repo_info in repositories: print(f"\n *** Repository Name: {repo_info['name']}") print(f" *** Repository Owner: {repo_info['owner']['login']}") print(f" *** Repository Description: {repo_info['description']}")
Producción:
Paso 7: Visualización con Plotly
Es hora de visualizar usando los datos que tenemos ahora para mostrar la popularidad de los proyectos de JavaScript en Github. Digerir la información visualmente siempre es útil.
Antes de usar, debe instalar el paquete Plotly. Para la instalación, ejecute este comando en la terminal.
pip install plotly
Código:
Python3
# imports import requests from plotly.graph_objs import Bar from plotly import offline # siteurl and headers site_url = 'https://api.github.com/search/repositories?q=language:javascript&sort=stars' headers = {'Accept': 'application/vnd.github.v3+json'} # response and parsing the response. response = requests.get(site_url, headers=headers) response_json = response.json() repositories = response_json['items'] # loop the repositories repo_names, repo_stars = [], [] for repo_info in repositories: repo_names.append(repo_info['name']) repo_stars.append(repo_info['stargazers_count']) # graph plotting data_plots = [{'type' : 'bar', 'x':repo_names , 'y': repo_stars}] layout = {'title': 'GItHubs Most Popular Javascript Projects', 'xaxis': {'title': 'Repository'}, 'yaxis': {'title': 'Stars'}} # saving graph to a Most_Popular_JavaScript_Repos.png fig = {'data': data_plots, 'layout': layout} offline.plot(fig, image = 'png', image_filename='Most_Popular_JavaScript_Repos')
El código anterior, cuando se ejecuta, guardará el gráfico de barras en un archivo png: Most_Popular_JavaScript_Repos en el repositorio actual.
Paso 8: Creación de una presentación… Introducción…
La producción de Microsoft, especialmente las hojas de cálculo y las presentaciones de PowerPoint, dominan el mundo. Así que vamos a crear una presentación de PowerPoint con el gráfico de visualización que acabamos de crear.
Para instalar python-pptx, ejecute este código en la terminal:
pip install python-pptx
Comenzaremos creando nuestra primera diapositiva con el título: «Repositorios populares de JavaScript en Github».
Python3
from pptx import Presentation # create an object ppt ppt = Presentation() # add a new slide slide = ppt.slides.add_slide(ppt.slide_layouts[0]) # Set the Text to slide.shapes.title.text = "Popular JavaScript Repositories in GitHub" # save the powerpoint ppt.save('Javascript_report.pptx')
Producción:
Primero importamos la presentación desde ppt y luego creamos un objeto ppt usando la clase de presentación del módulo ppt. Se agrega una nueva diapositiva con el método add_slide(). El texto se agrega usando slide.shapes.
Paso 9: Guardar el gráfico en pptx.
Ahora que los conceptos básicos para crear un PowerPoint están cubiertos en los pasos anteriores. Ahora profundicemos en la última pieza de código para crear un informe.
Python3
from pptx import Presentation from pptx.util import Inches from datetime import date # create an Object ppt = Presentation() first_slide = ppt.slides.add_slide(ppt.slide_layouts[0]) # title (included date) title = "Popular JavaScript Repositories in GitHub - " + str(date.today()) # set the title on first slide first_slide.shapes[0].text_frame.paragraphs[0].text = title # slide 2 - set the image img = 'Most_Popular_JavaScript_Repos.png' second_slide = ppt.slide_layouts[1] slide2 = ppt.slides.add_slide(second_slide) # play with the image attributes if you are not OK with the height and width pic = slide2.shapes.add_picture(img, left= Inches(2),top = Inches(1),height = Inches(5)) # save the powerpoint presentation ppt.save('Javascript_report.pptx')
Producción:
Finalmente, pondremos todos los pasos anteriores comentados en un solo programa.
Python3
import requests from plotly.graph_objs import Bar from plotly import offline from pptx import Presentation from pptx.util import Inches from datetime import date def github_api(): # siteurl and headers site_url = 'https://api.github.com/search/repositories?q=language:javascript&sort=stars' headers = {'Accept': 'application/vnd.github.v3+json'} # response and parsing the response. response = requests.get(site_url, headers=headers) response_json = response.json() repositories = response_json['items'] # loop the repositories repo_names, repo_stars = [], [] for repo_info in repositories: repo_names.append(repo_info['name']) repo_stars.append(repo_info['stargazers_count']) # graph plotting data_plots = [{'type' : 'bar', 'x':repo_names , 'y': repo_stars}] layout = {'title': 'GItHubs Most Popular Javascript Projects', 'xaxis': {'title': 'Repository'}, 'yaxis': {'title': 'Stars'}} # saving graph to a Most_Popular_JavaScript_Repos.png fig = {'data': data_plots, 'layout': layout} offline.plot(fig, image = 'png', image_filename='Most_Popular_JavaScript_Repos') def create_pptx_report(): # create an Object ppt = Presentation() first_slide = ppt.slides.add_slide(ppt.slide_layouts[0]) # title (included date) title = "Popular JavaScript Repositories in GitHub - " + str(date.today()) # set the title on first slide first_slide.shapes[0].text_frame.paragraphs[0].text = title # slide 2 - set the image img = 'Most_Popular_JavaScript_Repos.png' second_slide = ppt.slide_layouts[1] slide2 = ppt.slides.add_slide(second_slide) # play with the image attributes if you are not OK with the height and width pic = slide2.shapes.add_picture(img, left= Inches(2),top = Inches(1),height = Inches(5)) # save the powerpoint presentation ppt.save('Javascript_report.pptx') if __name__ == '__main__': github_api() create_pptx_report()
Publicación traducida automáticamente
Artículo escrito por sasankac280689 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA