{"repo": "bcefghj/bcefghj", "files": {"stats.json": {"9193cca0df949ccea9741b8a714e668af9605774": {"t": 1785603919.7651176, "n": 130, "h": "840dfda8d1c8aba2", "c": "{\n \"total_stars\": 7047,\n \"total_forks\": 1013,\n \"followers\": 856,\n \"public_repos\": 75,\n \"updated_at\": \"2026-08-01 16:57 UTC\"\n}"}}, "update_stats.py": {"8e548b10801d172336cd1ccd28478349860400ae": {"t": 1785603922.2236147, "n": 3516, "h": "5fdc7804ac0134e7", "c": "#!/usr/bin/env python3\n\"\"\"\nGitHub Stats Auto-Updater\n每天自动获取所有仓库数据并更新 README 中的数据看板\n\"\"\"\n\nimport os\nimport json\nimport urllib.request\nimport urllib.error\nfrom datetime import datetime, timezone\n\nGITHUB_TOKEN = os.environ.get(\"GH_TOKEN\", \"\")\nUSERNAME = \"bcefghj\"\nREADME_PATH = \"README.md\"\nSTATS_JSON_PATH = \"stats.json\"\n\n\ndef api_get(url):\n req = urllib.request.Request(url)\n req.add_header(\"Authorization\", f\"token {GITHUB_TOKEN}\")\n req.add_header(\"Accept\", \"application/vnd.github.v3+json\")\n req.add_header(\"User-Agent\", \"github-stats-updater\")\n with urllib.request.urlopen(req) as resp:\n return json.loads(resp.read().decode())\n\n\ndef get_all_repos():\n repos = []\n page = 1\n while True:\n url = f\"https://api.github.com/users/{USERNAME}/repos?per_page=100&page={page}&sort=updated\"\n data = api_get(url)\n if not data:\n break\n repos.extend(data)\n if len(data) < 100:\n break\n page += 1\n return repos\n\n\ndef get_user_info():\n return api_get(f\"https://api.github.com/users/{USERNAME}\")\n\n\ndef format_number(n):\n if n >= 1000:\n return f\"{n/1000:.1f}k\"\n return str(n)\n\n\ndef build_stats_table(repos, user_info, now_str):\n own_repos = [r for r in repos if not r.get(\"fork\")]\n\n total_stars = sum(r.get(\"stargazers_count\", 0) for r in own_repos)\n total_forks = sum(r.get(\"forks_count\", 0) for r in own_repos)\n followers = user_info.get(\"followers\", 0)\n public_repos = user_info.get(\"public_repos\", 0)\n\n # 保存 JSON 供 badge 使用\n stats_data = {\n \"total_stars\": total_stars,\n \"total_forks\": total_forks,\n \"followers\": followers,\n \"public_repos\": public_repos,\n \"updated_at\": now_str,\n }\n with open(STATS_JSON_PATH, \"w\") as f:\n json.dump(stats_data, f, indent=2)\n\n block = f\"\"\"