GithubGist es un lugar donde puede crear una esencia privada o pública, es decir, almacenar sus archivos de forma privada o pública. Supongamos un escenario en el que ha escrito una buena cantidad de conceptos básicos para su proyecto y desea descargar un conjunto de ellos. La única forma en que puede hacerlo usando GithubGist es abrir todos y cada uno de los gist individuales para descargar ZIP o clonar a través de HTTP o SSH.
Este artículo trata de simplificar la tarea anterior. Usando los comandos a continuación, incluso puede descargar gists de otros usuarios de github excluyendo los privados hasta que sepa su contraseña.
Usaremos el paquete de requests para esta propuesta. Es un paquete increíble para enviar requests HTTP con un código mínimo.
Instalación
1. Descargue el paquete de PyPI a través de la terminal usando la
sintaxis de pip3:
pip3 install requests
Nota: Para convertirse en usuario root, ejecute el siguiente comando:
sudo pip3 install requests
Script de Python3
El script no puede ejecutarse en un IDE en línea y, por lo tanto, puede hacer clic aquí para ver cómo funciona.
import requests import os def create_directory(dirname): #Creates a new directory if a directory with dirname does not exist try: os.stat(dirname) except: os.mkdir(dirname) def show(obj): #Displays the items in the obj for i in range(len(obj)): print(str(i)+': '+str(obj[i])) def auth(): #Asks for the user details ask_auth = input("Do you want to download gists from your account ? Type 'yes' or 'no': ") if(ask_auth=="yes"): user = input("Enter your username: ") password = input("Enter your password: ") request = requests.get('https://api.github.com/users/'+user+'/gists' , auth=(user, password)) elif(ask_auth=="no"): user = input("Enter username: ") request = requests.get('https://api.github.com/users/' +user+'/gists') return [ask_auth, user, request] def load(request): #Loads the files and the gist urls output = request.text.split(",") gist_urls = [] files = [] for item in output: if "raw_url" in item: gist_urls.append(str(item[11:-1])) if "filename" in item: files.append(str(item.split(":")[1][2:-1])) return [gist_urls, files] def write_gist(filename, text): #Writes text(gist) to filename fp = open(filename, 'w') fp.write(text) fp.close() def download(permission, user, request, fileno): #Loads and writes all the gists to <em>dirname</em> if(permission == "yes" or permission == "no"): gist_urls, files = load(request) dirname = user+"'s_gists/" create_directory(dirname) if(fileno[1] == "all"): for i in range(len(gist_urls)): gist = requests.get(gist_urls[i]) write_gist(dirname+files[i], gist.text) else: for i in range(1,len(fileno)): gist = requests.get(gist_urls[int(fileno[i])]) write_gist(dirname+files[int(fileno[i])], gist.text) def detailed(urls, pos): #Prints out the contents of a file gist = requests.get(urls[int(pos)]) print(gist.text) def main(): #Authenticates and downloads gists according to user's choice #Commands: #show: To show all the available gists with their assigned gistno #download all: To download all the available gists #download gistno(s): To download gist(s) assigned to gistno(s) #detailed gistno: To print content of gist assigned to gistno #exit: To exit the script ask_auth, user, request = auth() urls, files = load(request) try: while(1): command = input("Enter your command: ") if("download" in command): download(ask_auth, user, request, command.split(" ")) elif("detailed" in command): detailed(urls, command.split(" ")[1]) elif(command == "show"): show(files) elif(command == "exit"): return except: pass if(__name__ == '__main__'): main()
Explicación
La API de GithubGist almacena información sobre cada usuario en http://api.github.com/users/username/gists.
- Envíe una solicitud HTTP a la URL anterior para recuperar información sobre el usuario.
- Busque el raw_url de cada esencia disponible y envíe requests HTTP para recuperar la información sobre ellos.
- Manipuló la información a sus necesidades.
Este artículo es una contribución de Sri Sanketh Uppalapati . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA