@@ -2,3 +2,5 @@ | |||
| 2 | 2 | 1. Add Travis | |
| 3 | 3 | 1. Add support for Python 2.7, 3.5, and 3.6 | |
| 4 | 4 | 1. Organize docs and folder structure better | |
| 5 | + 1. Add all scripts to single CLI for easy running, testing, and searching | ||
| 6 | + 1. Add License | ||
@@ -32,3 +32,4 @@ | |||
| 32 | 32 | 1. **30_fullcontact.py**: Call the [FullcContact](https://www.fullcontact.com/developer/) API | |
| 33 | 33 | 1. **31_youtube_sentiment.py**: Calculate sentiment score from the comments of a Youtube video | |
| 34 | 34 | 1. **32_stock_scraper.py**: Get stock prices | |
| 35 | + 1. **34_git_all_repos.py**: Clone all repositories from a public user or organization on Github. Usage: `python git_all_repos.py users USER_NAME` or `python git_all_repos.py orgs ORG_NAME` | ||
@@ -0,0 +1,42 @@ | |||
| 1 | + import sys | ||
| 2 | + import os | ||
| 3 | + import requests | ||
| 4 | + | ||
| 5 | + | ||
| 6 | + def get_total_repos(group, name): | ||
| 7 | + repo_urls = [] | ||
| 8 | + page = 1 | ||
| 9 | + while True: | ||
| 10 | + url = 'https://api.github.com/{0}/{1}/repos?per_page=100&page={2}' | ||
| 11 | + r = requests.get(url.format(group, name, page)) | ||
| 12 | + if r.status_code == 200: | ||
| 13 | + rdata = r.json() | ||
| 14 | + for repo in rdata: | ||
| 15 | + repo_urls.append(repo['clone_url']) | ||
| 16 | + if (len(rdata) >= 100): | ||
| 17 | + page += 1 | ||
| 18 | + else: | ||
| 19 | + print('Found {0} repos.'.format(len(repo_urls))) | ||
| 20 | + break | ||
| 21 | + else: | ||
| 22 | + print(r) | ||
| 23 | + return False | ||
| 24 | + return repo_urls | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + def clone_repos(all_repos): | ||
| 28 | + count = 1 | ||
| 29 | + print('Cloning...') | ||
| 30 | + for repo in all_repos: | ||
| 31 | + os.system('Git clone ' + repo) | ||
| 32 | + print('Completed repo #{0} of {1}'.format(count, len(all_repos))) | ||
| 33 | + count += 1 | ||
| 34 | + | ||
| 35 | + if __name__ == '__main__': | ||
| 36 | + if len(sys.argv) > 2: | ||
| 37 | + total = get_total_repos(sys.argv[1], sys.argv[2]) | ||
| 38 | + if total: | ||
| 39 | + clone_repos(total) | ||
| 40 | + | ||
| 41 | + else: | ||
| 42 | + print('Usage: python USERS_OR_ORG GITHUB_USER_OR_ORG-NAME') | ||
0 commit comments