2026-09-28 15:48:35 +08:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* 简航 SimpleNav —— 添加/编辑网站时自动抓取元信息(供后台 AJAX 调用)
|
2026-09-28 16:43:10 +08:00
|
|
|
* 流程:访问网址拿标题 → 解析页面/ manifest 里的高分辨率图标候选 → 择优下载到本地
|
|
|
|
|
* 返回:{ ok, name, short, icon, icon_url, candidates, url }
|
2026-09-28 15:48:35 +08:00
|
|
|
*/
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
require_once __DIR__ . '/_auth.php';
|
|
|
|
|
require_login();
|
2026-09-28 16:43:10 +08:00
|
|
|
send_no_cache();
|
2026-09-28 15:48:35 +08:00
|
|
|
|
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
|
|
|
|
|
|
$url = isset($_GET['url']) ? norm_url((string)$_GET['url']) : '';
|
|
|
|
|
if ($url === '') {
|
|
|
|
|
echo json_encode(['ok' => false, 'msg' => '缺少网址'], JSON_UNESCAPED_UNICODE);
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-28 16:43:10 +08:00
|
|
|
$meta = fetch_site_meta($url);
|
2026-09-28 15:48:35 +08:00
|
|
|
$domain = domain_of($meta['final_url'] ?: $url);
|
2026-09-28 16:43:10 +08:00
|
|
|
$iconFile = download_best_icon($meta['icons'], $domain);
|
|
|
|
|
|
|
|
|
|
$name = $meta['name'] !== '' ? $meta['name'] : ($meta['title'] !== '' ? $meta['title'] : $domain);
|
2026-09-28 15:48:35 +08:00
|
|
|
|
|
|
|
|
echo json_encode([
|
2026-09-28 16:43:10 +08:00
|
|
|
'ok' => true,
|
|
|
|
|
'url' => $url,
|
|
|
|
|
'final_url' => $meta['final_url'],
|
|
|
|
|
'name' => $name,
|
|
|
|
|
'short' => $name,
|
|
|
|
|
'title' => $meta['title'],
|
|
|
|
|
'icon' => $iconFile,
|
|
|
|
|
'icon_url' => $iconFile !== '' ? icon_src($iconFile) : '',
|
|
|
|
|
'candidates' => count($meta['icons']),
|
2026-09-28 15:48:35 +08:00
|
|
|
], JSON_UNESCAPED_UNICODE);
|