← 返回信息流
AI 资讯Hacker News·3 天前

一天内成功抢救七千余个旧GIF

原标题:Today I Rescued 7,234 Old GIFs

速览

一位用户分享了自己在一天内成功抢救7234个旧GIF的经历,这些GIF来自早期互联网时代。该行动利用了特定工具或脚本进行批量恢复与格式转换,避免了数字资料的丢失。这一故事唤起了人们对网络文化遗产保存的关注,也展示了个人技术爱好者在数字档案管理中的潜力。

AI 深度解读

背景

一则来自 Hacker News 的帖子吸引了科技社区的关注:有人花费精力从古老的 Ibiblio 图标浏览器中抢救出了 7234 个 GIF 图标。这些图标由 Gioacchino La Vecchia 在 1990 年代精心整理,构成了一个庞大的图标库。然而,由于网站实现方式陈旧(采用服务器端图像映射),导致 Archive.org 等常规归档工具都无法完整抓取这批文件。一位名为 GlitchyZorua 的用户注意到了这个困境,并尝试手动归档,但过程极其繁琐。直到本文作者 Dan 介入,利用巧妙的编程手段,最终成功获取全部图标,并重新构建了一个可搜索、可访问的现代网站。

核心内容

该图标库的结构看似简单:一个首页索引,链接到 24 个子索引页面,每个子索引页面再链接到 57 个图标目录页面,这些目录页面代表 114 个图标集合,总共包含最多 7296 个图标(实际救回 7234 个)。每个图标多为 32×32 像素的 GIF 文件。

但是,当你试图从目录页面跳转到具体的图标文件时,真正的障碍出现了。表面上你点击的是一个图片链接,但实际上点击的是一个「图像映射(imagemap)」。最常见的客户端图像映射(client-side imagemap)会将坐标和对应的 URL 直接嵌入 HTML 代码中,解析非常容易。可这次遇到的是服务器端图像映射(server-side imagemap)。对应的 HTML 代码中完全不包含任何目标 GIF 文件的 URL,只有一张图片和指向服务器端映射处理脚本的链接。目录索引也被禁用,因此无法通过去掉图片文件名来暴力浏览目录。

为了批量获取这些图标,作者推测服务器运行的是 Apache,可能使用了 mod_imagemap 模块来处理服务器端映射。可以想象,服务器上有一个配置文件,将矩形坐标区域映射到重定向的 URL。虽然拿不到配置文件,但可以通过观察网页布局推断出点击区域的大小和位置:每个图标(含尺寸信息)占据 72×89 像素的区域,图标在页面上按 8×8 网格排列。因此每个可点击区域的中心点坐标可以推算出来——左上角为 (36,44),然后 X 方向每次增加 72 像素,Y 方向每次增加 89 像素。

于是作者设计了如下伪代码流程:

  • 对于每个图标库编号(从 1 到 113)
    • 对于 X 坐标集合 {36,108,180,252,324,396,468,540}
    • 对于 Y 坐标集合 {44,133,222,311,400,489,578,667}
      • 生成形如 https://www.ibiblio.org/iconbin/imagemap/icon{library}?{x},{y} 的 URL
      • 对该 URL 发送 HTTP HEAD 请求
      • 如果响应状态码为 302(重定向),则记录返回的 Location 头部(即图标文件的真实 URL)

这样就能获得库中所有数千个 GIF 的真实地址。随后使用 wget 批量下载。下载完成后,作者用 Ruby 和 ERB 模板编写了一个极简的静态站点生成器,创建一个新的图标浏览网站,包含了分页(与原始网站的页码对应)以及客户端搜索功能。所有图标文件也提供了 Git 仓库可供直接克隆。最终成品托管在 ibiblio-icon-archive.danq.dev。

关键要点

  • 原始图标库托管在 Ibiblio 上,采用服务器端图像映射(server-side imagemap),HTML 中不直接暴露图标文件的 URL。
  • 无法通过目录浏览或查看页面源代码直接获取图标链接,常规归档(如 Archive.org)也未成功抓取全部图标。
  • 通过分析布局规律,推断每个可点击区域大小为 72×89 像素,并按 8×8 网格排列,从而计算出中心点坐标。
  • 利用服务器端图像映射的接口格式(icon{library}?x,y),对每个坐标组合发送 HEAD 请求,捕获 302 重定向响应中的 Location 头部,即可获取真实 GIF 地址。
  • 脚本遍历 113 个图标库目录(编号 1 至 113),每个目录最多 64 个坐标组合,总坐标数约 7232 个,最终实际获得 7234 个唯一图标(可能个别目录略有多余或缺失)。
  • 下载完成后,使用 Ruby 和 ERB 模板生成了全新的静态网站,支持分页浏览和客户端搜索,并开放了完整的 Git 仓库供他人克隆。

意义与影响

这次抢救行动不仅拯救了一批具有历史价值的 1990 年代图标资源,使其免于被互联网遗忘,更展示了在遇到老旧、非标准技术实现的网站时,如何通过逆向工程和编程思维突破限制。服务器端图像映射作为一种几乎被遗忘的 Web 早期技术,通常会给现代数据抓取带来很大困难,但作者利用其实现原理——坐标映射到重定向——成功地绕过了这个障碍。

该项目也再次印证了「公开数据可被合理归档」的理念。原始图标库是公开可访问的,只是访问方式非常低效,作者的做法不是黑客攻击,而是自动化了正常的人类浏览行为。此外,新网站采用静态 HTML 和客户端搜索,降低了维护门槛,也更利于未来的存档者抓取全量数据。对于互联网历史爱好者、复古 UI 设计参考者,以及关心数字文化遗产的人而言,这是一次富有启发意义的实践。

查看原文 →danq.me