logo

Baixar gists do Github de forma simples

GithubGist é um lugar onde você pode criar uma essência privada ou pública, ou seja, armazenar seus arquivos de forma privada ou pública. Vamos supor um cenário em que você escreveu um bom número de conceitos básicos para o seu projeto e deseja baixar um conjunto deles. A única maneira de fazer isso usando GithubGist é abrir cada essência individual para baixar ZIP ou clonar via HTTP ou SSH. Este artigo tem como objetivo tornar a tarefa acima mais simples. Usando os comandos abaixo, você pode até baixar gists de outros usuários do github, excluindo os privados, até saber sua senha. Estaremos usando solicitações pacote para esta proposta. É um pacote incrível para enviar solicitações HTTP com código mínimo. Instalação 1. Baixe o pacote em PyPI via terminal usando pip3 Sintaxe:
pip3 install requests
Observação: To become a root user run the following command:
sudo pip3 install requests
Script Python3 O script não pode ser executado em um IDE online e, portanto, você pode clicar aqui to see how it works. Python
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   dirname   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(1len(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() 
Explicação A API GithubGist armazena informações sobre cada usuário em https://api.github.com/users/username/gists.
  • Envie uma solicitação HTTP para o URL acima para recuperar informações sobre o usuário.
  • Procure o url_bruto de cada essência disponível e enviou solicitações HTTP para recuperar as informações sobre eles.
  • Manipulou as informações de acordo com suas necessidades.