Skip to content

Instantly share code, notes, and snippets.

@petergi
Created October 28, 2024 13:26
Show Gist options
  • Save petergi/3994eb37ce69c157f1a8f3cdd998a1f7 to your computer and use it in GitHub Desktop.
Save petergi/3994eb37ce69c157f1a8f3cdd998a1f7 to your computer and use it in GitHub Desktop.
Downloads and manages GitHub gists using the GitHub API.
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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment