内容
# 无限搜索
English | [한국어](README.ko.md) | 中文 | [日本語](README.ja.md) | [Español](README.es.md)
[](https://github.com/flyingsquirrel0419/unlimited-search/actions/workflows/test.yml)
[](LICENSE)
[](pyproject.toml)
<p align="center"><strong>从公共页面到可用的信号。</strong></p>
<p align="center">
<img src="assets/hero.png" width="860" alt="无限搜索英雄,显示公共网址通过路由、HTTP、RSS、存档和媒体进入干净的结构化文本,用于MCP和CLI。">
</p>
`无限搜索`是一个Python CLI和MCP服务器,用于读取公共网页内容,当直接获取不足够时。它结合了平台公共路由、类似浏览器的HTTP标识、内容备用方案、公共存档备用方案和媒体元数据提取,位于一个本地工具后面。
它适用于需要从公共网址获取可用文本的代理和自动化工具。它不打算绕过登录、付费墙、验证码、私有网络、帐户限制、IP封禁或访问控制。
## 快速入门
前提:Python 3.12或更新版本。
```bash
python -m pip install unlimited-search
unlimited-search read https://en.wikipedia.org/wiki/OpenAI --max-content-chars 800
```
命令返回带有页面`内容`、`裁决`、`请求元数据`和尝试`跟踪`的JSON。
对于MCP客户端,安装软件包并注册stdio服务器:
```json
{
"mcpServers": {
"unlimited-search": {
"command": "unlimited-search",
"args": ["serve"]
}
}
}
```
## 提供的内容
| 功能 | 说明 |
| --- | --- |
| 公共平台路由 | 在通用获取之前使用未经身份验证的公共API、馈送或元数据路由。 |
| 类似浏览器的获取 | 尝试多个TLS/浏览器标识、URL变体、引用者策略和响应验证。 |
| 内容备用方案 | 通过Jina Reader、RSS/Atom发现和嵌入式页面元数据恢复公共文本。 |
| 存档备用方案 | 当实时读取失败时,退回到Wayback和archive.today/archive.ph公共快照。 |
| 媒体元数据 | 使用`yt-dlp --dump-json`获取公共媒体网址的元数据,而不下载媒体。 |
| MCP工具 | 向MCP客户端公开单网址读取、批量读取、诊断和媒体提取。 |
参见[平台覆盖](PLATFORMS.md)以获取完整的支持矩阵和已知空白。
## 安装
从PyPI安装:
```bash
python -m pip install unlimited-search
```
更新:
```bash
python -m pip install --upgrade unlimited-search
```
移除:
```bash
python -m pip uninstall unlimited-search
```
## CLI用法
```bash
unlimited-search help
unlimited-search <command> [arguments]
```
命令:
```text
serve 启动MCP_stdio服务器
read <url> 读取公共网址
diagnose <url> 诊断访问而无需完整内容
media <url> 提取公共媒体元数据
help 显示帮助
```
常见示例:
```bash
unlimited-search read https://example.com --max-content-chars 1000
unlimited-search diagnose https://example.com
unlimited-search media https://www.youtube.com/watch?v=dQw4w9WgXcQ
```
备用方案关注的烟雾测试:
```bash
unlimited-search read https://example.com --no-public-routes --max-attempts 0 --max-content-chars 500
unlimited-search read http://www.whitehouse.gov/1600/presidents/barackobama --no-public-routes --max-attempts 1 --max-content-chars 500
```
有用标志:
| 标志 | 适用 | 目的 |
| --- | --- | --- |
| `--timeout SECONDS` | `read`、`diagnose`、`media` | 设置请求超时。 |
| `--max-attempts N` | `read`、`diagnose` | 限制通用HTTP网格尝试。 |
| `--max-content-chars N` | `read` | 限制返回的内容大小。 |
| `--no-public-routes` | `read`、`diagnose` | 跳过平台公共路由。 |
| `--preferred-identity NAME` | `read`、`diagnose` | 首先尝试特定的类似浏览器标识。 |
| `--success-selector CSS` | `read` | 将匹配的CSS选择器视为成功信号。可以重复。 |
## MCP工具
MCP服务器在stdio上运行:
```bash
unlimited-search serve
```
可用工具:
| 工具 | 目的 |
| --- | --- |
| `read_public_url` | 读取一个公共网址并返回内容、裁决、元数据和跟踪。 |
| `read_public_urls` | 在一个工具调用中读取多个公共网址。 |
| `diagnose_access` | 返回一个紧凑的诊断和尝试跟踪,而无需完整内容。 |
| `extract_media` | 通过`yt-dlp`提取公共媒体元数据,而不下载媒体。 |
更多配置示例请参见[MCP配置](docs/mcp-config.md)。
## 读取工作原理
<p align="center">
<img src="assets/pipeline.png" width="860" alt="管道图:公共网址到平台路由、HTTP网格、内容备用方案、存档备用方案、媒体元数据和干净的公共文本,带有登录、付费墙或验证码的安全停止。">
</p>
`read_public_url`尝试从最不具侵入性的公共路由开始,然后逐步尝试更广泛的恢复路径:
1. Reddit、X/Twitter、Bluesky、Hacker News、Google News、Stack Overflow、Wikipedia、GitHub、npm、PyPI、Wayback、Naver、Amazon和Google Scholar等站点的特定平台公共路由。
2. 具有类似浏览器TLS标识、URL变体、引用者策略、响应验证和选定的HTTP/1.1传输备用方案的通用HTTP网格。
3. 非浏览器内容备用方案:
- Jina Reader JSON内容
- 通过Jina `external.alternate`的RSS/Atom发现
- 常见的源馈送路径,如`/feed`、`/rss`和`/atom.xml`
- OGP、JSON-LD、Schema.org和Next.js有效载荷元数据恢复
4. 公共存档备用方案:
- Wayback可用API
- Wayback最新/直接快照
- Wayback CDX最新200快照
- archive.today/archive.ph的最佳努力快照
5. 已知公共媒体主机的`yt-dlp`元数据提取。
备用方案的成功被报告为`weak_ok`或`suspect_ok`,而不是`strong_ok`,因为恢复的内容可能不完整、过时或仅限元数据。
## 安全边界
`无限搜索`是一个公共内容读取器。当目标需要身份验证、付款、验证码、私有网络访问或硬反滥用绕过时,它应该停止或报告失败。
读取器默认拒绝私有、环回、链路本地、组播、保留和元数据服务目标。在允许备用路由继续之前,会检查重定向。
返回的HTML、JSON、RSS、存档文本和元数据应被视为不受信任的内容。
## 开发
```bash
uv sync --extra dev
uv run unlimited-search read https://example.com --max-content-chars 300
uv run unlimited-search serve
uv run pytest
uv build
```
在更改路由或备用行为时运行实时评估集:
```bash
uv run python scripts/run_eval.py --list
uv run python scripts/run_eval.py
uv run python scripts/run_eval.py --markdown eval-results/report.md --csv eval-results/report.csv
uv run python scripts/run_eval.py --baseline eval-results/eval-20260707T000000Z.jsonl --fail-on-regression
```
默认评估用例位于[scripts/eval_urls.yaml](scripts/eval_urls.yaml)。像NamuWiki、TikTok、Naver Search、Amazon和Google Scholar这样的困难站点是可选的,因此远程阻止或速率限制不会导致整个运行失败。
## 项目文档
- [平台覆盖](PLATFORMS.md)
- [MCP配置](docs/mcp-config.md)
- [故障排除](TROUBLESHOOTING.md)
- [安全](SECURITY.md)
- [贡献](CONTRIBUTING.md)
- [行为准则](CODE_OF_CONDUCT.md)
- [免责声明](DISCLAIMER.md)
- [隐私](PRIVACY.md)
- [变更日志](CHANGELOG.md)
- [许可证](LICENSE)