JSON Fetcher(JSON请求抓取,适用于Claude和ChatGPT,可以批量下载Claude历史对话)

满足各种需求

作者
Ann Smith
日安装量
0
总安装量
1
评分
0 0 0
版本
3.0
创建于
2025-04-21
更新于
2025-04-21
大小
122.0 KB
许可证
MIT
适用于

一、脚本简介

脚本名称: JSON Fetcher(JSON请求抓取)
主要功能:

  1. 拦截并记录页面中通过 XMLHttpRequestfetch 发起的 JSON 请求。
  2. 分类显示所有已拦截到的 JSON 数据(如 Backend APIPublic APIAPI其他等)。
  3. 提供可视化面板(浮动窗口),可对拦截到的 JSON 进行:
    • 复制内容到剪贴板
    • 下载单个或批量下载
    • 预览 JSON 内容(带语法高亮)
    • 清空对应分类
    • 记录并下载脚本运行日志
  4. 特殊数据解析:自动解析Claude对话列表和ChatGPT对话列表,并支持对话的单个/批量下载,以及将解析结果导出为表格(CSV)。
  5. 额外功能
    • 浮动面板可最小化关闭拖拽缩放大小,并可“重新打开”
    • 日志记录与下载
    • 一键滚动到顶部/底部
    • Claude 批量下载支持进度条显示完成度
    • 检测并展示(若有)PoW 难度信息

二、使用说明

1. 如何安装脚本

  1. 在浏览器(Chrome / Firefox / Edge 等)里安装 TampermonkeyGreasemonkey等用户脚本管理器插件。
  2. 打开插件的管理面板,新建脚本,将本代码全部复制粘贴进去,然后保存
  3. 当页面匹配到脚本配置的 @match 域名(例如 yiyan.baidu.com, claude.ai, chatgpt.com, poe.com 等)时,脚本会自动运行。

2. 如何查看/操作脚本界面

脚本运行后,会在页面右上方(或左上方)出现三个主要“浮动面板”:

  1. JSON 抓取器

    • 这里展示了所有被脚本捕获的 JSON 请求,并且按照分类展示(如果设置启用分类)或者统一展示。
    • 每个请求条目上,有几个常见按钮:
      • 复制:把该请求的 JSON 内容复制到剪贴板。
      • 下载:下载该单条请求的 JSON 文件。
      • 预览:在独立的小弹窗中查看 JSON 的内容(带着简单的语法高亮)。
    • 面板顶部,还可以进行批量下载清空分类等操作。
  2. 操作日志

    • 这里会记录脚本的一些运行信息和日志,比如“拦截到了哪些URL”“是否下载了日志”等。
    • 可以下载日志或清空日志。
  3. 特殊数据解析

    • 该面板会专门显示ClaudeChatGPT对话列表:脚本能够从返回的 JSON 中识别出包含对话信息的条目,并列出这些对话名称、ID、更新时间等。
    • 你可以点击对应的下载按钮,对某个对话的原始 JSON 数据进行导出;也可批量下载(全部或筛选最近 1 天 / 1 周 / 1 月),甚至可以把这些数据导出为一张 CSV 表格。

3. 浮动面板如何操作

  • 拖拽移动:浮动面板标题栏左侧有一个“小圆把手”,按住它可以拖动面板到屏幕合适位置。
  • 最小化/还原:点击标题栏中“➖”按钮可最小化,再次点击可还原。
  • 关闭:点击标题栏“✖️”会关闭面板,但页面上会出现一个“重新打开”的按钮,点击即可再打开。
  • 缩放:拖动浮动面板右下角的边框,可以手动调整面板大小。
  • 标题栏也提供一键到顶 / 一键到底功能,快速查看面板内容顶部/底部的信息。

4. 常见问题

  1. 为什么有些 JSON 没被拦截到?

    • 脚本只拦截带有 application/json 类型的响应。如果后端没返回正确的 Content-Type,或者数据不是 JSON,则可能不会显示在列表里。
  2. 批量下载是怎么操作的?

    • 在“JSON 抓取器”的分类区,点“⬇️”即可批量下载当前分类下所有已捕获的 JSON 请求。
    • 在“特殊数据解析”的 Claude / ChatGPT 列表,也提供“⬇️全部”或“下载最近 N 天”按钮,点击后会依次自动下载。
  3. 下载的 JSON 文件名是怎么生成的?

    • 默认使用 URL 最后的部分(剥离掉参数)作为文件名,如果没有就会使用通用名,比如 download.json
    • 对于 Claude 或 ChatGPT 对话,会包含对话名称(Claude)或对话 ID(ChatGPT)等信息方便区分。

三、技术细节说明

1. 核心原理

  • XHR 与 Fetch 的拦截:脚本在 XMLHttpRequest.prototype.open/sendwindow.fetch 上进行重写(Monkey patch),从而在请求完成后对响应进行捕获和处理。
  • 分类规则:脚本通过匹配 URL 中的一些关键词(如 backend-api, public-api, /api/ 等)来对抓到的请求进行分类。如果你想自定义分类,需在 CATEGORY_RULES 中进行修改。
  • 去重处理:脚本会根据完整 url 去重,防止同一个请求重复添加。

2. 主要模块概览

  1. RequestInterceptor

    • overrideXHR()overrideFetch() 分别改写了 XMLHttpRequestfetch
    • 完成后检查 Content-Type 是否包含 application/json,若符合则保存到 capturedRequests
    • 根据 URL 规则,给每条请求打上 category
    • 提供 starUuid 机制,若页面 URL 中带有 /c/<uuid>/chat/<uuid>,则自动判定该 UUID 对应的请求归类到 “星标” 类别。
  2. UILogger

    • 负责管理操作日志,支持在本地 localStorage 中存储并回放。
    • 提供可视化日志面板,以及“下载日志”为 .log 文件的功能。
    • 提供“清空日志”操作。
  3. UIManager

    • 包含了“JSON 抓取器”面板和“特殊数据解析”面板的管理逻辑。
    • 能对捕获到的请求进行展示、下载、预览,以及搜索过滤和批量操作。
    • “特殊数据解析”主要调用 SpecialDataParser 的结果。
  4. FloatingPanel

    • 自定义的通用浮动面板类,实现了可拖拽、可缩放、可最小化、可关闭等功能。
    • 面板位置、大小、最小化状态、关闭状态等都会存到 localStorage,页面刷新后能保持。
  5. SpecialDataParser

    • 用来识别特别的 JSON 数据结构,如 Claude 对话列表、ChatGPT 对话列表:
      • Claude 列表结构:匹配 .../api/organizations/xxx/chat_conversations 并解析其返回的数组。
      • ChatGPT 列表结构:匹配 .../backend-api/conversations?... 并解析其返回中的 items 数组。
    • 提供对单条对话和批量对话的下载逻辑。
    • 能将解析结果(对话名、时间等)以 CSV 文件形式导出。
  6. PoWParser

    • 简单检测 JSON 里是否含有 proofofwork 字段并显示 PoW 难度(仅作示例,可在需要时扩展)。

3. 关键点与可定制性

  1. @match 范围:脚本头部的 @match 标签指定了生效域名,若要在其他网站使用,可自行添加或修改。
  2. 分类逻辑:如需更改或扩充分类,可在 RequestInterceptor.CATEGORY_RULES 中添加/修改相应的正则或字符串匹配。
  3. 存储:日志与面板状态都会存到 localStorage,如需进行多标签页同步或跨站共享,需要额外的存储机制(如 GM_setValue / GM_getValue 或自己实现服务端存储)。
  4. UI 样式:脚本末尾的 <style> 中定义了所有面板、列表、按钮、进度条等样式,你可以自行调整配色或布局。

4. 安全与性能

  • 拦截方式基于常见的 Monkey patch,理论上不会拦截到内部非标准使用的请求,但对于常规的 AJAX / Fetch 请求都有效。
  • 如果某网站有很多 JSON 请求,脚本会在内存中维持相应数量的数据(RequestInterceptor.capturedRequests 数组),可能占用一定内存,每条 JSON 只保存一次,不会无限增长,且可以随时在界面上手动清理。
  • 面板操作、日志等都在本地浏览器完成,与服务器无交互,安全性依赖于浏览器环境。