ThierryRakotomanana/GitCharta

GitHub: ThierryRakotomanana/GitCharta

GitCharta 通过交互式世界地图可视化 GitHub 用户的关注者、正在关注及幽灵粉的全球地理分布,解决原生平台缺乏社交网络洞察的问题。

Stars: 3 | Forks: 0

# 🗺️ GitCharta **使用 Git Charta 查看你的社交网络中有谁、他们来自哪里,并分享你全球影响力的快照。** 这是一个交互式世界地图,可以可视化展示你的关注者、你关注的人,以及没有关注你的“幽灵粉”的地理分布。 [![在线演示](https://img.shields.io/badge/demo-live-brightgreen.svg)](https://github-audience-atlas.vercel.app/) [![版本](https://img.shields.io/badge/version-1.0.0-blue.svg)](#-roadmap) [![状态](https://img.shields.io/badge/status-active--development-success.svg)](#-roadmap) [![Token](https://img.shields.io/badge/PAT-optional-blue.svg)](#-prerequisites) [![欢迎 PR](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#-contributing) [![许可证](https://img.shields.io/badge/license-MIT-lightgrey.svg)](#-license) **🔗 [在线体验](https://gitcharta.vercel.app/) :无需 token 即可开始,随时使用你自己的 PAT 来跳过共享的演示限制。** [在线演示](https://github-audience-atlas.vercel.app/) • [功能](#-key-features) • [安全性](#-security--privacy) • [快速开始](#-quick-start) • [用法](#-usage) • [架构](#-how-it-works) • [贡献](#-contributing)

GitCharta : interactive world map preview

## 📖 目录 - [概述](#-overview) - [安全与隐私](#-security--privacy) - [核心功能](#-key-features) - [技术栈](#-tech-stack) - [前置条件](#-prerequisites) - [快速开始](#-quick-start) - [用法](#-usage) - [工作原理](#-how-it-works) - [路线图](#-roadmap) - [贡献](#-contributing) - [许可证](#-license) - [作者与联系方式](#-author--contact) ## 🎯 概述 ### 痛点 GitHub 只提供原始的关注者和正在关注列表:让你一无所知。它们无法展示你的社交网络实际上有什么共同文化,或者你的影响力延伸到了哪里,而且你很容易就会跟丢那些**非互惠关系**:你关注了但对方从未关注你的账号。 ### 解决方案 **GitCharta** 将你的社交网络数据转化为一张可探索的世界地图。只需指定任何 GitHub 账号,它就会绘制出: - 🌍 你的**受众**在物理位置上的分布 - 🌍 你**学习对象**的所在地 - 👻 他们之中哪些是**幽灵粉**:没有任何互惠的单向关注(没有关注你) 你不需要任何准备工作即可尝试:只需一个用户名,共享的速率限制演示 token 就能为你生成地图。当你想要更高的限制时,随时添加你自己的 Personal Access Token;关于这究竟会改变什么以及不会改变什么,请参阅[安全与隐私](#-security--privacy)。 ### 为什么这很重要 | 对象 | 价值 | | ------------------------------------ | ------------------------------------------ | | **开源维护者** | 了解你的项目的地理覆盖范围 | | **正在拓展人脉的开发者** | 发现与你的作品互动的人群模式 | | **任何对自身社交图谱感兴趣的人** | 清理你不再需要的单方面“关注” | ## 🔒 安全与隐私 将 token 粘贴到随机网站通常是不明智的建议,因此这里详细说明了每种模式的具体工作原理,以及你该如何亲自验证,而不是仅仅听信我们的一面之词。 ### 如果使用你自己的 PAT | 声明 | 含义 | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **不涉及后端** | 请求直接从你的浏览器发送到 `api.github.com` 和 `api.github.com/graphql`。在此路径中永远不会调用 GitCharta 的后端。 | | **仅存于内存中** | 你的 PAT 仅存在于当前会话的 JavaScript 状态中:**不会**被持久化到 `localStorage`、`sessionStorage` 或 cookies 中。刷新或关闭标签页后即被丢弃。 | | **开源** | 不要只听信这份 README 的说明:阅读源码,或者 fork 并在本地运行。 | ### 如果不使用(演示模式) | 声明 | 含义 | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | | **无需 token** | 你只需一个 GitHub 用户名即可生成地图。 | | **服务端的共享 token** | 你的请求通过 GitCharta 的后端进行中继,该后端会附加一个由所有演示用户共享的服务器端 token。在高负载下预计会出现节流限制。 | | **无需暴露个人信息** | 在这种模式下你没有提供任何凭据,因此后端不可能泄露属于你的 PAT。 | 你可以随时切换模式:在会话中途粘贴 PAT,GitCharta 就会在该会话的剩余时间内完全弃用后端。 **在粘贴任何 token 之前,请自行验证:** 1. 打开浏览器的 DevTools → **Network** 标签页。 2. 粘贴 token(最好是仅具有 `read:user` 权限的一次性 token)并生成地图。 3. 确认每一个附加了你的 token 的传出请求都只发送到了 `api.github.com` / `api.github.com/graphql`。一旦提供了 PAT,发往 GitCharta 自身后端的请求应该完全消失。 ## ✨ 核心功能 | 类别 | 描述 | | ----------------- | -------------------------------------------------------------------------------------------------------- | | 👥 **关注者** | 关注你的开发者的地理分布 | | 🔭 **正在关注** | 你关注并从中学习的人的所在地 | | 👻 **幽灵粉** | 非互惠关系:你关注但未关注你的账号 | | 📍 **未知位置** | 专门为没有可用公开位置的账号提供的视图,这样就不会有人凭空从地图上消失 | | 📊 **统计数据** | 一目了然的数字:映射的账户总数、热门国家、幽灵粉比例等 | ## 🛠️ 技术栈 | 层级 | 技术 | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 前端 | `React, Vite, TypeScript` | | 地图 / 可视化 | `Custom Geocoding & D3` | | 数据源 | [GitHub GraphQL API](https://docs.github.com/en/graphql) (主要) + [GitHub REST API](https://docs.github.com/en/rest) (填补 GraphQL 遗漏的字段) | | 后端 (演示 token 代理) | `TBD` :一个仅将共享 token 保留在服务端的小型 serverless 函数 | | 托管 / 部署 | `Vercel` :静态前端,外加用于演示 token 后端的 serverless 函数 | | 包管理器 | `npm` | ## ✅ 前置条件 开箱即用,无需任何前置条件。GitCharta 内置了一个共享的演示 token,因此只需指定一个 GitHub 用户名即可工作,你无需进行任何设置:只是在所有演示用户之间有速率限制。 可选,如果你想要更高的限制或完全跳过后端: - 一个 **GitHub Personal Access Token (PAT)** :见下文。 ### 生成 Personal Access Token(可选) 1. 前往 **GitHub → Settings → Developer settings → Personal access tokens**。 2. 生成一个具有以下 scope 的新 token: | Scope | 为什么需要它 | | ----------- | --------------------------------------------- | | `read:user` | 读取你的个人资料以及关注者/正在关注数据 | ## 🚀 快速开始 ### 选项 A:使用在线应用(最快) 无需安装,无需 token。打开 **[github-audience-atlas.vercel.app](https://github-audience-atlas.vercel.app/)**,输入用户名,然后直接前往[用法](#-usage)。随时添加你自己的 PAT 以跳过共享的演示限制:关于这具体会如何改变浏览器发出的请求,请参阅[安全与隐私](#-security--privacy)。 ### 选项 B:在本地运行 ``` # 1. Clone 仓库 git clone https://github.com/ThierryRakotomanana/github-audience-atlas.git cd # 2. 安装依赖 npm install # 3. 启动 app npm run dev ``` 这种方式默认会让你进入 BYO-PAT 模式:由于本地没有配置共享 token,你需要在 UI 中粘贴自己的 token。要在本地也体验演示/共享 token 流程,请在下方设置 `DEMO_GITHUB_TOKEN`。 ### 环境变量 | 变量 | 使用者 | 是否必需 | 描述 | | ------------------- | ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `DEMO_GITHUB_TOKEN` | 仅后端 | 仅当你想在本地运行共享演示 token 流程时才需要 | 后端使用此 token 来处理未提供自己 PAT 的访问者的请求。永远不会被打包或暴露给客户端。 | ``` # .env.example DEMO_GITHUB_TOKEN=your_shared_token_here ``` ## 💻 用法 1. **启动**应用:打开[在线版本](https://github-audience-atlas.vercel.app/),或者在本地运行 `npm run dev`。 2. **输入**你想要映射的 GitHub 用户名。 3. _(可选)_ **粘贴**你自己的 Personal Access Token 以跳过共享的演示限制。 4. 点击 **Generate Map**,在交互式地球仪上探索你的社交网络。 ## 🧩 工作原理 总体而言,该应用程序遵循以下 pipeline: ``` flowchart LR A[Username + optional PAT] --> B{PAT provided?} B -->|Yes| C[Browser calls GitHub API directly] B -->|No| D[Browser calls GitCharta backend] D --> E[Backend attaches shared token] C --> F[GraphQL : bulk fetch followers / following] E --> F F --> G{Fields missing?} G -->|Yes| H[REST fallback fills the gaps] G -->|No| I[Categorize: Follower / Following / Ghost] H --> I I --> J[Resolve location per profile] J --> K[Render map + stats] ``` 1. **输入**:你提供一个要映射的 GitHub 用户名,以及可选的你自己的 PAT。 2. **路由**:使用 PAT 时,你的浏览器直接与 GitHub 通信。如果没有,请求将通过 GitCharta 的后端,该后端会附加一个共享的、速率受限的 token:由于你没有提供任何凭据,因此你自己的凭据绝不会出现在此路径中。 3. **获取**:首先查询 GitHub GraphQL API,因为它拉取关注者、正在关注列表和个人资料字段所需的往返次数比 REST 少得多。GraphQL 遗漏的任何内容都会通过针对性的 REST 调用来补全。 4. **分类**:对账号进行交叉比对,以识别出关注者、正在关注列表和非互惠的“幽灵粉”。 5. **解析**:使用每个账号的公开位置字段将其放置在地图上;没有位置的账号则会被放入专门的未知位置视图中,而不是凭空消失。 6. **渲染**:结果将连同统计面板一起绘制在可交互探索的世界地图上。 ## 🗺️ 路线图 计划在即将发布的版本中推出: | 状态 | 功能 | 描述 | 备注 | | ------ | ------------------------ | ----------------------------------------------------------------------- | -------------------------------- | | ⬜ | **地图截图** | 将你的地图导出为图片,以便分享或放入 README | | | ⬜ | **缩放和平移** | 放大查看任何区域,而不是眯着眼睛看整个世界 | | | ⬜ | **Stargazer 地图** | 映射那些 star 了你的 repo 的人,而不仅仅是你的关注者 | | | ⬜ | **GitHub 个人资料徽章** | 将你的地图的实时徽章直接嵌入到你的 GitHub README 中 | | | ⬜ | **覆盖率徽章** | 展示你的受众覆盖了全球多大比例的徽章 | | | ⬜ | **直接取消关注** | 直接在地图界面上取消关注“幽灵粉” | 需要 `user:follow` PAT scope | | ⬜ | **高级颜色模式** | 热力图、雷达视图,以及“Contribution Green”主题 | | | ⬜ | **UI/UX 大修** | 对界面和用户流程的持续改进 | | 有想法吗?[创建一个 issue](../../issues) 来建议新功能。 ## 📄 许可证 ## 👤 作者与联系方式 由 **Thierry Rakotomanana** 构建和维护。 如果你觉得这个项目有用,可以考虑关注:我们会定期分享新的工具和开源贡献。 [![GitHub](https://img.shields.io/badge/GitHub-ThierryRakotomanana-181717?style=for-the-badge&logo=github)](https://github.com/ThierryRakotomanana) [![Twitter](https://img.shields.io/badge/Twitter-@ThieryRakt-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/ThieryRakt)
标签:D3.js, React, Syscalls, 暗色界面, 社交网络, 自动化攻击