import requests import base64 def split_link(repo_link): parts = repo_link.replace("https://", "").split("/") base_url = "https://" + parts[0] owner = parts[1] repo = parts[2] return base_url, owner, repo def get_repo_data(repo_link): base_url, owner, repo = split_link(repo_link) url = f"{base_url}/api/v1/repos/{owner}/{repo}" return requests.get(url).json() def get_commits(repo_link): base_url, owner, repo = split_link(repo_link) url = f"{base_url}/api/v1/repos/{owner}/{repo}/commits" return requests.get(url).json() def get_code_lines(repo_link): base_url, owner, repo = split_link(repo_link) # получаем список файлов url = f"{base_url}/api/v1/repos/{owner}/{repo}/git/trees/main?recursive=1" data = requests.get(url).json() total_lines = 0 for file in data.get("tree", []): if file.get("type") != "blob": continue path = file.get("path", "") if not path.endswith(".py"): continue # читаем файл через API (НЕ raw!) file_url = f"{base_url}/api/v1/repos/{owner}/{repo}/contents/{path}" r = requests.get(file_url) if r.status_code != 200: continue file_data = r.json() content = file_data.get("content") if content: decoded = base64.b64decode(content).decode("utf-8", errors="ignore") total_lines += len(decoded.splitlines()) return total_lines