对外对接说明
能对接。对外只用 api.php:传入目标站,分页拿回已经替换好的外链地址,由你自己的程序去请求。
接口只出链,不代打。不要指望一次调用就在服务器上打完整库。前台是浏览器 iframe 发请求;关网页也要继续跑请用 定时任务。data.php 只给首页用,对接请不要用它。
本站探测
点一下会请求当前站点的 api.php?action=info,确认接口是否可用。
一、请求说明
| 项 | 内容 |
|---|---|
| 地址 | api.php(与本页同目录) |
| 方式 | GET |
| 鉴权 | 无。需要挡外人时,请在接口管理系统或 Nginx 自行加 Key |
| 跨域 | 默认不加 CORS。服务端 curl / 自己的 PHP 调用即可 |
二、查询库信息 action=info
不需要 url。用来确认外链库条数和版本。
GET api.php?action=info
返回示例
{
"code": 200,
"success": true,
"message": "ok",
"data": {
"version": "1.4.4",
"count": 10000,
"num_default": 20,
"num_max": 100,
"actions": ["info", "list"]
}
}
三、拉取外链 action=list
把 links.txt 里的 *** 换成目标站,按页返回可请求的完整 URL。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
| url | 是 | 目标站。可写 www.example.com,也可带 https:// |
| page | 否 | 页码,从 0 开始,默认 0 |
| num | 否 | 每页条数,1~100,默认 20 |
| https | 否 | 传 1 时把返回地址里的 http 升成 https |
| action | 否 | 固定 list,不传也当 list |
请求示例
GET api.php?url=www.example.com&page=0&num=20&https=1
返回字段
| 字段 | 说明 |
|---|---|
| code | 200 成功;400 参数错;405 方法错;500 读库失败 |
| success | true / false |
| data.target | 规范化后的目标站 |
| data.list | 本页外链地址数组 |
| data.done | true 表示这一页已经没有数据,可以停 |
| data.count / maxPage | 总条数、总页数 |
| exec_time / tip / version | 耗时、版权提示、版本 |
成功返回(列表只留 2 条)
{
"code": 200,
"success": true,
"message": "ok",
"data": {
"target": "www.example.com",
"list": [
"https://www.36kr.com/search/articles/www.example.com",
"https://www.anquanke.com/search?s=www.example.com"
],
"page": 0,
"num": 20,
"count": 10000,
"maxPage": 500,
"done": false,
"https": true
}
}
四、调用方怎么用
- 先调 action=info 看 count
- page 从 0 开始调 list,直到 data.done 为 true
- 对 data.list 里每条 URL 发一次 GET
- 建议每页间隔数秒,不要把对方站点打满
- 浏览器里请求时加上 https=1
PHP 示例
$api = 'https://你的域名/api.php';
$host = 'www.example.com';
$page = 0;
while (true) {
$q = $api . '?url=' . rawurlencode($host) . '&page=' . $page . '&num=20&https=1';
$json = json_decode((string)@file_get_contents($q), true);
if (empty($json['success'])) break;
if (!empty($json['data']['done']) || empty($json['data']['list'])) break;
foreach ($json['data']['list'] as $link) {
@file_get_contents($link, false, stream_context_create(['http' => ['timeout' => 8]]));
}
$page++;
sleep(3);
}
curl 探测
curl.exe "https://你的域名/api.php?action=info"
curl.exe "https://你的域名/api.php?url=www.example.com&page=0&num=5&https=1"
五、和前台的区别
| 前台页面 | api.php | |
|---|---|---|
| 谁发外链请求 | 访客浏览器里的 iframe | 调用方自己 |
| 返回内容 | data.php 给的带 *** 模板 | 已替换目标站的完整 URL |
| 适合 | 打开网页点一下 | 自己的站、定时任务、二次开发 |
六、注意事项
- 必须 HTTPS 部署,否则浏览器侧混合内容会被拦
- links.txt 不能直接下载,接口从服务器读文件
- 改了 links.txt 后若开了 APCu,最多 1 小时后数量才会变
- 接口无 Key。挂到公网被别人刷库时,请自行加鉴权或限速
- 仅限给自己的站点做公开查询页外链,违规不售