Phase 1 MVP: crawl 10 high-quality oshwhub projects into LFS
Why: - Charles 指定:先爬 10 个高质量项目存 Gitea LFS,一个项目一个文件夹, 保留原文件和 URL。先以小批量验证 schema + LFS 流水线,放量前再拍板 存储规模。 What: - crawlers/oshwhub: 列表 API (`/api/project?sort=hot`) + SSR HTML 解析, 一次性产出 metadata / description / cover / files / _urls - schemas/project.schema.json: 跨源统一 schema - docs/sources/oshwhub.md: API 入口 / 字段映射 / 陷阱调研 - pyproject.toml: httpx[http2] 单依赖 - .gitattributes: data/raw/**/files/** 一律走 LFS(规则写窄,避免误伤 schemas/*.json 等) - .gitignore: 移除 data/raw/* 排除(改走 LFS 入库) 10 个项目覆盖:调试器 / 加热台 / 盖革计数器 / 数控电源 / 焊台 / 智能手表 / USB 测电流 / ZVS 感应加热 / AI 开发板 / 红外热成像。 共 52 附件 ≈ 524 MB 入 LFS,筛选判据 grade=4 & likes>=100 & 多样性。 Known gaps(见 plan.md § Phase 1.4): - EasyEDA 源 JSON 需登录 (u.lceda.cn),v0.1 跳过 - fs-web-stream.jlc.com 的工程源下载未测 - scripts/validate.py 自动 schema 校验未实现 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
57
log.md
57
log.md
@@ -4,6 +4,63 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-23 19:30 Phase 1 MVP:10 个高质量 oshwhub 项目入库
|
||||
|
||||
**Claude 会话**:承接仓库初始化
|
||||
|
||||
### API 调研结论
|
||||
|
||||
- 列表 API:`GET https://oshwhub.com/api/project?page=N&pageSize=M&sort=hot`,无鉴权,返回 12493 个项目元数据(含 grade / likes / stars / views / forks)
|
||||
- 详情:`GET https://oshwhub.com/<path>` 是 SSR HTML,嵌入 escaped JSON,含 `license` + `attachments[]`(每个带 name / src / size / md5 / ext / mime / download_count)
|
||||
- 附件 CDN:`https://image.lceda.cn{src}` — 已验证无鉴权直接下载
|
||||
- EasyEDA 工程源 JSON(`u.lceda.cn`)需登录,v0.1 不抓
|
||||
- 详细调研见 `docs/sources/oshwhub.md`
|
||||
|
||||
### 选 10 个高质量项目
|
||||
|
||||
判据:`grade == 4`(平台精品徽章) + `likes ≥ 100` + 应用领域多样(避免同类堆叠)+ 排除 `_copy` 派生仓。
|
||||
|
||||
10 个项目覆盖:调试器、加热台、盖革计数器、可调电源、焊台、智能手表、USB 测电流、ZVS 感应加热、AI 开发板、红外热成像。
|
||||
|
||||
### MVP 爬虫
|
||||
|
||||
位置:`crawlers/oshwhub/crawler.py`
|
||||
|
||||
- `list_projects()` — 列表 API 分页
|
||||
- `pick_top()` — 按 like×3 + star + fork×2 + views/100 + comments×2 + grade×50 排序
|
||||
- `parse_detail_html()` — 从 SSR HTML 提取 title / license / description / attachments
|
||||
- `crawl_one()` — 每项目产出:`metadata.json` / `description.md` / `cover.*` / `files/*` / `_urls.json`
|
||||
- QPS ≤ 0.5(`SLEEP_BETWEEN = 2.0`),UA 显式声明 `FacereDataset/0.1`
|
||||
|
||||
### 抓取与入库
|
||||
|
||||
- 10/10 成功,52 个附件,**524 MB**
|
||||
- Gitea LFS(v25.4.3 原生支持)+ 本地 `git-lfs 3.5.1`(用户态二进制装在 `~/.local/bin/`)
|
||||
- `.gitattributes` 规则:`data/raw/**/files/**` 一律走 LFS;元数据(metadata.json / description.md / \_urls.json / cover.\*)走普通 git
|
||||
- 每项目目录结构:
|
||||
```
|
||||
data/raw/oshwhub/<uuid>/
|
||||
├── metadata.json # 按 schemas/project.schema.json
|
||||
├── description.md
|
||||
├── cover.{jpg,png,jpeg}
|
||||
├── _urls.json # 所有原始 URL 清单
|
||||
└── files/* # 原始附件(LFS)
|
||||
```
|
||||
|
||||
### 改动汇总
|
||||
|
||||
- 新增:`crawlers/oshwhub/{__init__,__main__,crawler}.py`、`schemas/project.schema.json`、`docs/sources/oshwhub.md`、`pyproject.toml`
|
||||
- 修改:`.gitattributes`(缩窄到 `data/raw/**/files/**`)、`.gitignore`(移除 `data/raw/*` 排除)
|
||||
|
||||
### 下一步建议给 Charles
|
||||
|
||||
1. 验收 10 个项目元数据质量(随机抽 2-3 条对照原站)
|
||||
2. 决定 Phase 1.4 放量目标(50?500?全量 12493?)
|
||||
3. 未解决:`fs-web-stream.jlc.com` 下载(工程源?)、`u.lceda.cn` 登录态抓工程 JSON
|
||||
4. Phase 2 准备:GitHub KiCad repo 调研
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-23 18:50 仓库初始化 & 数据源调研
|
||||
|
||||
**Claude 会话**:初始化
|
||||
|
||||
Reference in New Issue
Block a user