Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import time
- GITHUB_API = "https://api.github.com"
- def get_repos(username):
- headers = {}
- repos = []
- page = 1
- while True:
- url = f"{GITHUB_API}/users/{username}/repos?per_page=100&page={page}"
- r = requests.get(url, headers=headers)
- if r.status_code != 200:
- print(f"[!] Failed to fetch repos (status {r.status_code})")
- break
- data = r.json()
- if not data:
- break
- repos.extend([repo for repo in data if not repo.get("fork", False)])
- page += 1
- return repos
- def get_user_emails(owner, repo, username):
- headers = {}
- emails = set()
- page = 1
- while True:
- url = f"{GITHUB_API}/repos/{owner}/{repo}/commits?per_page=100&page={page}"
- r = requests.get(url, headers=headers)
- if r.status_code != 200:
- print(f"[!] Failed to fetch commits for {repo} (status {r.status_code})")
- break
- commits = r.json()
- if not commits:
- break
- for commit in commits:
- try:
- author = commit.get("author")
- if author and author.get("login", "").lower() == username.lower():
- email = commit["commit"]["author"]["email"]
- if email and "noreply.github.com" not in email:
- emails.add(email)
- except KeyError:
- pass
- page += 1
- time.sleep(0.5)
- return emails
- def find_emails(username):
- repos = get_repos(username)
- all_emails = set()
- print(f"\n[+] Found {len(repos)} non-forked public repositories\n")
- for repo in repos:
- repo_name = repo["name"]
- print(f"[*] Scanning repository: {repo_name}")
- emails = get_user_emails(username, repo_name, username)
- all_emails.update(emails)
- return all_emails
- if __name__ == "__main__":
- print("=== GitHub User Email Finder ===")
- username = input("Enter GitHub username: ").strip()
- if not username:
- print("[!] No username provided.")
- exit(1)
- emails = find_emails(username)
- print("\n=== Emails Found ===")
- if emails:
- for email in sorted(emails):
- print(email)
- else:
- print("No public emails found for this user.")
Advertisement
Add Comment
Please, Sign In to add comment