mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-10-21 05:44:20 +08:00
## 中文 补齐已有 owner 与已锁定上游内容可证明的许可证、技能类型和收录版本。保留 Anthropic Source Available 和其他附加条件,不把所有内容统一标为 MIT,不提升 listing-only 的安装准入。 README 保留最新的双语结构及以 manifest 为准的数量口径,增加静态目录不存访问量、下载量、评分或 Stars 的边界。 发布兼容性:**本 PR 不包含**两支团队新增的本地化字段,也不包含微信支付 `latestVersion: 1.0`;旧客户端会拒绝这些新字段,另以待发布 PR 保留,等匹配客户端发布后再合并。 验证:47 项目录校验测试、19 项 i18n 测试、5 项合集生成测试通过;完整目录/i18n/翻译新鲜度检查通过,6 个固定来源合集的生成检查通过,2 个浮动来源按既有规则明确跳过。发现并修复了生成器在 Windows 使用反斜杠造成的误报:输出改为 POSIX 路径,比较规则不放宽、不重写合集数据。 ## English Fill only license, type and listed-release facts supported by existing owners or pinned upstream content. Preserve custom license restrictions and acquisition eligibility. Keep the current bilingual README and manifest-derived inventory; do not author usage analytics. This PR deliberately excludes localized team fields and the two-part WeChat Pay version that older clients reject. Those changes remain pending a compatible client release. Validation passes: 47 catalog-validator tests, 19 i18n tests, five collection-generator tests, complete catalog and translation checks, and generated inventory checks for six pinned collections. Two mutable sources remain explicitly skipped. Fix Windows-generated path separators without weakening comparison or changing declared children.
8.4 KiB
8.4 KiB
license, name, description, version, type, risk_level, status, tags, metadata, market
| license | name | description | version | type | risk_level | status | tags | metadata | market | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MIT | cnipa-patent-search | 国家知识产权局专利检索——输入企业名称(作为申请人),返回专利列表(申请号/申请日/发明名称/专利类型/专利状态/主分类号/申请人/发明人/公开号/公开日/代理机构)。Use when 用户提到"查专利"、"知识产权"、"专利检索"、"专利申请"、"cnipa"、"pss-system"、"发明"、"实用新型"、"外观设计"、"专利状态"。 | 1.0.0 | procedural | medium | enabled |
|
|
|
CNIPA Patent Search
L0: One-Sentence Summary
Input a company name, drive the CNIPA pss-system patent search via Kimi WebBridge browser automation, and return a structured patent list.
L1: Overview
- Data source: CNIPA Patent Search and Analysis System (
pss-system.cponline.cnipa.gov.cn) - Auth: logged-in account (registration required — anonymous search redirects to login)
- Invocation: Kimi WebBridge browser automation (navigate + evaluate + CDP insertText)
- Prerequisites:
- Kimi WebBridge daemon running
- the user has logged into pss-system in the browser (login persists; log in once and reuse)
Account Registration
pss-system requires real-name registration (phone + SMS):
- Open
https://pss-system.cponline.cnipa.gov.cn/in the browser - Click "注册" and complete real-name registration
- Log in once — the browser keeps the session for later automation
L2: Procedure
1. Check the WebBridge daemon
~/.kimi-webbridge/bin/kimi-webbridge.exe status
If down or disconnected, start it: kimi-webbridge.exe start.
2. Navigate to pss-system
Write C:\tmp\cnipa-nav.json:
{
"action": "navigate",
"args": {
"url": "https://pss-system.cponline.cnipa.gov.cn/",
"newTab": true,
"group_title": "专利检索"
},
"session": "cnipa-patent"
}
curl.exe -s -X POST "http://127.0.0.1:10086/command" \
-H "Content-Type: application/json" \
--data-binary "@C:\tmp\cnipa-nav.json" --max-time 30
Wait 5 seconds.
3. Confirm login, accept the disclaimer, enter search
Write C:\tmp\cnipa-agree.json:
{
"action": "evaluate",
"args": {
"code": "(async function(){var txt=document.body.innerText||'';var hasLogout=txt.includes('退出');if(txt.includes('免责声明')){var btns=document.querySelectorAll('button.el-button--primary');for(var b of btns){if((b.innerText||'').replace(/\\s+/g,'')==='同意'){b.click();break;}}await new Promise(function(r){setTimeout(r,4000);});}txt=document.body.innerText||'';return JSON.stringify({url:location.href.slice(0,80),isSearch:txt.includes('常规检索'),inputs:document.querySelectorAll('input').length,hasLogout:hasLogout});})()"
},
"session": "cnipa-patent"
}
Login check: if hasLogout=false, the user must log into pss-system in the browser first.
4. Focus the search box + CDP input
Write C:\tmp\cnipa-focus.json:
{
"action": "evaluate",
"args": {
"code": "(function(){for(var i of document.querySelectorAll('input')){if((i.placeholder||'').includes('请输入关键词')){i.value='';i.dispatchEvent(new Event('input',{bubbles:true}));i.focus();return 'focused';}}return 'not-found';})()"
},
"session": "cnipa-patent"
}
Then write C:\tmp\cnipa-insert.json (CDP real input, Vue-compatible):
{
"action": "cdp",
"args": {
"method": "Input.insertText",
"params": { "text": "{company name}" }
},
"session": "cnipa-patent"
}
5. Click search + wait for results
Write C:\tmp\cnipa-click.json:
{
"action": "evaluate",
"args": {
"code": "(async function(){var clicked=false;for(var el of document.querySelectorAll('div.btn')){if((el.innerText||'').replace(/\\s+/g,'')==='检索'){el.click();clicked=true;break;}}await new Promise(function(r){setTimeout(r,8000);});var tables=document.querySelectorAll('table').length;var rows=document.querySelectorAll('table tr').length;var hits=(document.body.innerText.match(/共[\\d,]+[条篇]/)||[])[0]||'';return JSON.stringify({clicked:clicked,url:location.href.slice(0,80),tables:tables,rows:rows,hits:hits});})()"
},
"session": "cnipa-patent"
}
6. Extract the result table
Write C:\tmp\cnipa-table.json:
{
"action": "evaluate",
"args": {
"code": "(function(){var table=document.querySelector('table');if(!table)return JSON.stringify({err:'no-table'});var headers=[];table.querySelectorAll('thead th').forEach(function(th){headers.push((th.innerText||'').trim())});var rows=[];table.querySelectorAll('tbody tr').forEach(function(tr){var cells=[];tr.querySelectorAll('td').forEach(function(td){cells.push((td.innerText||'').trim().slice(0,60))});rows.push(cells)});return JSON.stringify({headers:headers,rowCount:rows.length,rows:rows});})()"
},
"session": "cnipa-patent"
}
7. Normalized mapping
{
"query_status": "success",
"source": "cnipa",
"company_name": "{company name}",
"total_found": 1,
"patents": [
{
"patent_number": "202310104843.5",
"application_date": "2023.01.16",
"patent_name": "一种通信方法及装置",
"patent_type": "发明",
"patent_status": "实质审查的生效",
"main_class_code": "H04W72/54",
"applicant": "华为技术有限公司",
"applicant_address": "广东省深圳市",
"publication_number": "CN117834529A",
"publication_date": "2024.04.05"
}
],
"timestamp": "2026-08-31T21:00:00+08:00"
}
8. Close the session
{
"action": "close_session",
"session": "cnipa-patent"
}
Known Limitations
- Login required: anonymous searches redirect to login or silently fail (unstable behavior); logged-in sessions return results reliably
- Session persistence: browser cookies keep the login valid for a long time, but re-login may be needed after long idle periods
- Vue compatibility: real input must go through CDP
Input.insertText(not DOM setters), otherwise the Vue autocomplete ignores the text - Pagination: when results exceed 10, click the pager and extract each page
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
| Search click redirects to login | not logged in | log into pss-system in the browser |
| Search click does nothing | Vue event not triggered | confirm CDP insertText was used; check the login state |
| Table empty | async results loading | retry extraction after 8 s |
| Stuck on the disclaimer | agree button not clicked | re-run the evaluate that clicks 同意 |