iamsupersocks/x-coordination-audit

GitHub: iamsupersocks/x-coordination-audit

一个离线社交媒体证据分析引擎,用于从 X 平台数据中提取并量化协同放大、自动化行为及配对时序证据。

Stars: 0 | Forks: 0

# xcoord **用于分析 X 平台上协同放大、自动化信号及 AI 垃圾内容的离线证据引擎。** `xcoord` 可将本地的 X/Twitter JSON 导出文件转换为明确的行动图谱和配对时序证据。它能帮助研究人员回答以下问题: - 是否总是同一批账号反复出现在相同的源帖子周围? - 两个账号围绕同一个共享 pivot 发布回复或引用变体的速度有多快? - 某种模式是否重复发生到了具有意义的程度,还是仅仅是个别偶发事件? - 哪些观察结果支持协同、自动化或内容回收的假设——哪些又不支持? 它**不是**一个神奇的 Bot 概率 API。协同、自动化、共同所有权和 AI 垃圾内容是截然不同的假设,需要不同的证据来支持。 ## 功能特性 ``` local JSON exports → normalized reply / quote / retweet relations → explicit pivot campaigns → observable timestamp truth → account-pair timing samples → CSV / JSON / Markdown / GraphML ``` ![xcoord 的运作方式](https://static.pigsec.cn/wp-content/uploads/repos/cas/d5/d5c59b779d1a1293aaed52b67eb6114d16aa930fe256f59e32b6645f8908a16b.svg) 核心特性: - 设计为离线运行:包内不包含任何网络调用或凭证; - 不可变的 status-ID 去重; - 实际支持 `clix` 字段:`author_handle`、`quoted_tweet`、`reply_to_id`、 `retweeted_by`; - 明确区分时间线所有者、推文作者和转推参与者; - 当操作时间戳不可用时,不捏造转推延迟; - 围绕共享 pivot 的绝对配对时间间隔; - `n`、平均值、中位数、总体/样本标准差、MAD、p90、最小/最大值; - 确定性的 CSV、JSON、Markdown 和 GraphML 导出。 ## 60 秒快速入门 ### Python ``` git clone https://github.com/iamsupersocks/x-coordination-audit.git cd x-coordination-audit python3.11 -m venv .venv source .venv/bin/activate pip install -e ".[dev]" xcoord audit fixtures/synthetic_timeline.json -o outputs/demo ``` 生成的文件: ``` outputs/demo/ ├── pair_stats.csv ├── audit_report.json ├── audit_report.md └── coordination.graphml ``` ### Docker ``` git clone https://github.com/iamsupersocks/x-coordination-audit.git cd x-coordination-audit mkdir -p raw outputs docker build -t xcoord:local . docker run --rm \ -v "$PWD/raw:/data:ro" \ -v "$PWD/outputs:/out" \ xcoord:local audit /data -o /out ``` 或者: ``` docker compose run --rm audit ``` 该镜像**仅包含 xcoord**。它不包含浏览器、X session、 cookies 或外部收集器。 ## 收集公开的 X 数据 数据收集工作委托给独立的 [`TheoRst/clix`](https://github.com/TheoRst/clix) CLI。`clix` 使用本地 浏览器 cookie 进行身份验证;xcoord 绝不会接触这些凭证。 经测试的收集器安装方法: ``` uv tool install clix0 clix auth login --browser chrome clix auth status clix doctor ``` 使用仓库自带的辅助工具收集多个账号数据: ``` python3 scripts/collect_clix.py \ Jouhatsu_ai Deep_GeniusAi KaitoEtLIA EloiLJF \ --count 100 \ --pages 10 \ --sleep 3 \ --profile-timeline \ --output-dir raw xcoord audit raw -o outputs/my-audit ``` 该辅助工具绝不会读取或存储凭证。它会生成干净的 JSON 数组以及一个 包含请求限制和**实际返回行数**的清单。 在收集数据之前,请先阅读完整指南: **[使用 clix 收集公开的 X 数据:安装、身份验证、安全、速率限制与 Docker →](docs/collecting-with-clix.md)** ## 公开的可视化案例研究 案例研究是附属产物:本仓库依然是一个可复用的引擎, 而每项调查都会发布其自身的证据、不确定性及局限性。 ### 围绕 `@Jouhatsu_ai` 的放大机制 - 总共审查了 16 个账号; - 6 个账号拥有足够的重复显式 pivot 证据以进行配对时序分析; - 10 个外围账号因具有嫌疑、相关性或证据不足而被保留, 而不是被直接静默丢弃; - 核心集合中包含 173 条原创帖子; - 154 条标准化的引用/回复互动; - 112 个显式 pivot/行动; - 15 个已测量的账号对。 ![所有已检查的账号](https://static.pigsec.cn/wp-content/uploads/repos/cas/4c/4ccaf9e9af3a31592fd646194fee1319af8791d372fdeba310709de29f1a6632.svg) **[阅读完整的简明案例研究 →](case-studies/jouhatsu-network-2026-07-31/README.md)** 该案例研究包含: - 对观察到的分发机制的通俗易懂的解释; - 所有已审查账号及其证据状态; - 精确到分钟的活动时间线; - 加权账号网络; - 配对矩阵和散布图; - 语料库覆盖范围和数据收集限制; - 一个明确声明并非黑名单的证据账本。 ## 输入约定 接受的输入: 1. 一个或多个 JSON 文件; 2. 一个包含直接 `*.json` 子文件的目录; 3. 包含推文对象的顶层数组; 4. 将数组包裹在 `tweets`、`data`、`items`、`timeline`、 `statuses` 或 `results` 下的对象。 ``` # 单个文件 xcoord audit raw/account.json -o outputs/run # 多个文件 xcoord audit raw/a.json raw/b.json -o outputs/run # 整个目录 xcoord audit raw -o outputs/run ``` 常见的字段别名包括: - ID:`id_str`、`id`、`tweet_id`、`status_id`; - 账号:`author_handle`、`screen_name`、`username`、`handle` 或嵌套的 `user` / `author`; - 时间戳:`created_at`、`createdAt`、`timestamp`、`posted_at`; - 回复 pivot:`reply_to_id`、`in_reply_to_status_id_str`; - 引用 pivot:`quoted_tweet`、`quoted_status_id`、`quoted_status`; - 转推 pivot:`retweeted_status`、`retweeted_status_id_str`。 不属于回复、引用或转推事件的原创推文会被 当前的时序引擎忽略。 ## 时间戳真实性模型 每个事件都带有明确的时间戳来源: ``` { "availability": "observed", "value": "2026-07-30T16:25:29+00:00", "source": "created_at", "reason": "event_field_present" } ``` 或者: ``` { "availability": "unavailable", "value": null, "source": null, "reason": "clix_retweet_original_timestamp_only" } ``` ### 为什么转推需要特殊处理 clix 的个人资料时间线转推可能会暴露原始推文的 `created_at`, 而不是账号点击转推的时间。因此,xcoord 会: 1. 使用 `retweeted_by` 作为操作者; 2. 使用顶层 status ID 作为 pivot; 3. 保留结构连边; 4. 将该操作的时间戳标记为不可用; 5. 将其从延迟统计中排除。 缺失的值依然保持缺失状态。它们绝不会被 转换成零秒响应。 ## 行动与配对模型 一个行动由一个明确且不可变的 pivot 状态作为主键标识: - 回复 → 被回复的 status; - 引用 → 被引用的 status; - 转推 → 被转推的原始 status。 对于在同一行动中具有可观察事件的每一对账号,xcoord 会 使用每个账号的最早事件并记录: ``` delay_seconds = abs(t(account_b) - t(account_a)) ``` 基于独立 pivot 提取的样本会产生以下统计: - `n`; - 平均值和中位数; - 总体和样本标准差; - MAD; - 最近秩 p90; - 最小/最大值; - 原始延迟样本。 解读规则:`n < 3` 仅供参考。对于倾斜的社交时序数据, 中位数和 MAD 通常比平均值和标准差更稳健。 ## 输出格式 | 文件 | 用途 | |---|---| | `pair_stats.csv` | 紧凑的配对级统计数据 | | `audit_report.json` | 完整的机器可读标准化报告 | | `audit_report.md` | 人类可读的事件、行动和配对表格 | | `coordination.graphml` | 用于 Gephi/Cytoscape 的无向网络 | ## 检测层级 | 层级 | 当前状态 | 所需证据 | |---|---|---| | 重复放大 | 已实现 | 显式的共享 pivot + 重复的时间戳 | | 配对同步 | 已实现 | `n`、中位数、σ、MAD、p90 | | 转推结构 | 已实现 | 操作者/pivot 字段;仅在时间戳可观察时计算延迟 | | 证据账本 | 在案例研究层实现 | 公开指标 + 置信度 + 局限性 | | 文本模板相似度 | 已规划 | 可复现的近似重复指标 | | 媒体重传检测 | 已规划 | 精确/感知哈希 + 来源归属 | | 节奏自动化 | 已规划 | 按时段计算的熵、突发规律性、全天候 (24/7) 时间窗口 | | 技术性 Bot 确认 | 超出单纯时序分析的范畴 | 独立的技术证据 | 不应将任何单一的“Bot 概率”将这些层级折叠为一个不透明的分数。 ## 安全与研究伦理 - 分析公开行为,而非私人身份。 - 保留源 URL 和不可变的 status ID。 - 发布实际的样本数量和不均衡的数据收集窗口。 - 将“协同”、“自动化”和“AI 垃圾内容”作为独立的声明对待。 - 不要将观察名单变成骚扰或大规模举报的目标列表。 - 不要公开浏览器 cookie、session、私人时间线或凭证。 - 如实描述证据支持的内容以及不支持的内容。 ## 开发 ``` pip install -e ".[dev]" pytest python3 scripts/render_case_study.py uv build ``` 案例研究渲染器仅使用 Python 的标准库和汇总的 CSV 输入。公开的 SVG 是确定性的,并且经过回归测试。 ## License xcoord 采用 MIT 协议。外部收集器保留其各自的许可证。
标签:Python, 代码示例, 子域名暴力破解, 数据分析, 无后门, 社交媒体, 社交网络分析, 自动化检测, 虚假信息研究, 请求拦截, 逆向工具