Files
FacereDataset/data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/source/89b78803dc7142a182ac7503389cd84a.json
Knowit d874278bc5 Add EasyEDA Std project source ingestion (10 boards backfilled)
打通 oshwhub origin=std 项目的工程源(schematic + PCB dataStr)抓取链路。原
plan.md §1.6 假设需要登录,实测 lceda.cn/api/documents/<doc>?uuid=<doc>&path=<doc>
对公开项目匿名可访问 —— 无需 cookie,无账号封禁风险。

调研:4 轮探测留痕在 data/state/std_probe[1-5]/(gitignored);翻 Std 编辑器
v6.5.51 的 main.min.js bundle 找到 ajaxDetail 端点;按 docType 区分两种
响应 shape(schematic 项目视图 vs PCB 文档视图)。

Crawler:
  - make_source_client() 用浏览器 UA + lceda.cn/editor Referer,因为
    oshwhub /api/project/<uuid> 端点拒绝 FacereDataset/0.1 UA(CLAUDE.md
    UA 例外条款:目标站主动封自定义 UA + 公开静态资源)
  - fetch_std_source(): 项目元 → version_documents → 逐文档 dataStr → 落
    source/<doc>.json + source/manifest.json
  - --with-source(爬新项目时一并抓源)/ --backfill-source(仅扫已有)
  - QPS ≤ 0.2 (SLEEP_SOURCE = 5s) 自律

Schema: 加 source_format / source_path / source_documents / editor_version
(前 3 进 enum 锁定,便于后续 Pro / KiCad 源对齐)。

回填结果:10/10 成功,45 个文档,33.2 MB;schema validate 全通。
docTypes 主要是 1 (schematic) 与 3 (pcb);USB 电压电流表只有 PCB 文档(4 个:
主板+盖板+底板+面板,作者未上传原理图源)。

完整调研:docs/sources/easyeda_std_source.md。
2026-04-28 20:07:40 +08:00

1 line
4.8 KiB
JSON

{"success":true,"code":0,"result":{"uuid":"89b78803dc7142a182ac7503389cd84a","puuid":"b077573dfb764e95b1d27faba49cca65","title":"面板_中夹板","description":"","docType":3,"master":"3c2485a7ffa14ece95405cd4c6394663","thumb":"//image.lceda.cn/histories/3c2485a7ffa14ece95405cd4c6394663.png","components":null,"updated_at":"2023-12-25 14:05:51","created_at":"2023-03-26 01:17:16","updateTime":1681215660,"download_times":6,"isAnonymousFile":false,"writable":false,"datastrid":"3c2485a7ffa14ece95405cd4c6394663","dataStr":{"head":{"docType":"3","editorVersion":"6.5.28","newgId":true,"c_para":[],"x":"4020","y":"3300.5","hasIdFlag":true,"importFlag":0,"transformList":""},"canvas":"CA~1000~1000~#000000~yes~#FFFFFF~1~1000~1000~line~0.5~mil~0.5~45~visible~0.05~4020~3300.5~1~yes","shape":["TRACK~0.5~10~~4063.307 3389.0825 4039.685 3347.744~gge1788~1","TRACK~0.5~10~~4039.685 3192.2325 4039.685 3347.744~gge1728~1","TRACK~0.5~10~~3823.15 3457.98 3823.15 3192.2325~gge1724~1","TRACK~0.5~10~~4039.685 3192.2325 3823.1499 3192.2324~gge1607~1","TRACK~0.5~10~~3842.8344 3497.351 4063.307 3497.3511~gge1894~1","TRACK~0.5~10~~4063.307 3389.0825 4063.307 3497.3511~gge1784~1","TRACK~0.5~10~~3823.15 3457.98 3823.1494 3477.666~gge1611~1","ARC~0.5~10~~M 3842.8344 3497.351 A 19.685 19.685 0 0 1 3823.1494 3477.666~~gge46~1","CIRCLE~3842.835~3477.665~6~0.5~10~gge1210~1~~circle_gge1213,circle_gge1216","CIRCLE~4042~3393.5~6~0.5~10~gge1249~1~~circle_gge1252,circle_gge1255","CIRCLE~3980~3420.5~20~0.5~10~gge1898~0~~circle_gge1902,circle_gge1905","CIRCLE~3860~3420.5~20~0.5~10~gge2253~0~~circle_gge2256,circle_gge2259","CIRCLE~3920~3280.5~20~0.5~10~gge2283~0~~circle_gge2286,circle_gge2289"],"layers":["1~TopLayer~#FF0000~true~false~true~","2~BottomLayer~#0000FF~true~false~true~","3~TopSilkLayer~#FFCC00~true~false~true~","4~BottomSilkLayer~#66CC33~true~false~true~","5~TopPasteMaskLayer~#808080~true~false~true~","6~BottomPasteMaskLayer~#800000~true~false~true~","7~TopSolderMaskLayer~#800080~true~false~true~0.3","8~BottomSolderMaskLayer~#AA00FF~true~false~true~0.3","9~Ratlines~#6464FF~true~false~true~","10~BoardOutLine~#FF00FF~true~true~true~","11~Multi-Layer~#C0C0C0~true~false~true~","12~Document~#FFFFFF~true~false~true~","13~TopAssembly~#33CC99~false~false~false~","14~BottomAssembly~#5555FF~false~false~false~","15~Mechanical~#F022F0~false~false~false~","19~3DModel~#66CCFF~false~false~false~","21~Inner1~#999966~false~false~false~~","22~Inner2~#008000~false~false~false~~","23~Inner3~#00FF00~false~false~false~~","24~Inner4~#BC8E00~false~false~false~~","25~Inner5~#70DBFA~false~false~false~~","26~Inner6~#00CC66~false~false~false~~","27~Inner7~#9966FF~false~false~false~~","28~Inner8~#800080~false~false~false~~","29~Inner9~#008080~false~false~false~~","30~Inner10~#15935F~false~false~false~~","31~Inner11~#000080~false~false~false~~","32~Inner12~#00B400~false~false~false~~","33~Inner13~#2E4756~false~false~false~~","34~Inner14~#99842F~false~false~false~~","35~Inner15~#FFFFAA~false~false~false~~","36~Inner16~#99842F~false~false~false~~","37~Inner17~#2E4756~false~false~false~~","38~Inner18~#3535FF~false~false~false~~","39~Inner19~#8000BC~false~false~false~~","40~Inner20~#43AE5F~false~false~false~~","41~Inner21~#C3ECCE~false~false~false~~","42~Inner22~#728978~false~false~false~~","43~Inner23~#39503F~false~false~false~~","44~Inner24~#0C715D~false~false~false~~","45~Inner25~#5A8A80~false~false~false~~","46~Inner26~#2B937E~false~false~false~~","47~Inner27~#23999D~false~false~false~~","48~Inner28~#45B4E3~false~false~false~~","49~Inner29~#215DA1~false~false~false~~","50~Inner30~#4564D7~false~false~false~~","51~Inner31~#6969E9~false~false~false~~","52~Inner32~#9069E9~false~false~false~~","99~ComponentShapeLayer~#00CCCC~false~false~false~0","100~LeadShapeLayer~#CC9999~false~false~false~","101~ComponentMarkingLayer~#66FFCC~false~false~false~","Hole~Hole~#222222~false~false~true~","DRCError~DRCError~#FAD609~false~false~true~"],"objects":["All~true~false","Component~true~true","Prefix~true~true","Name~true~false","Track~true~true","Pad~true~true","Via~true~true","Hole~true~true","Copper_Area~true~true","Circle~true~true","Arc~true~true","Solid_Region~true~true","Text~true~true","Image~true~true","Rect~true~true","Dimension~true~true","Protractor~true~true"],"BBox":{"x":3823.1,"y":3192.2,"width":240.2,"height":305.1},"preference":{"hideFootprints":"","hideNets":""},"DRCRULE":{"Default":{"trackWidth":1,"clearance":0.6,"viaHoleDiameter":2.4,"viaHoleD":1.2},"isRealtime":false,"isDrcOnRoutingOrPlaceVia":false,"checkObjectToCopperarea":true,"showDRCRangeLine":true},"netColors":[]},"owner":{"uuid":"eac388b086064c2087f67a10b524a911","username":"yanranxiaoxi","nickname":"久治明千树汐","avatar":"//image.lceda.cn/pullimage/zXQJtlkjuGCFlTZJdn64muqpPdbvz6PKGX6l7VPt.jpeg","team":false},"public":true,"org_uuid":"","version":"4893896fac7c434eaad16ea31aea7d9c"}}