OneNav Extend

使用PHP开发的书签管理程序,免费开源。原落幕魔改版改名为OneNav Extend

介绍

OneNav Extend 是一款开源免费的书签(导航)管理程序,使用PHP + SQLite 3开发,界面简洁,安装简单,使用方便。OneNav可帮助你你将浏览器书签集中式管理,解决跨设备、跨平台、跨浏览器之间同步和访问困难问题,做到一处部署,随处访问。

OneNav Extend ( 原:魔改版 ) 是基于xiaoz原创的OneNav基础上进行大量的修改,实现了更多的功能!现与xiaoz版是分开发布,独立维护的!

功能特点

新增功能

项目地址

技术支持

img

img

QQ截图20220313000658.jpg QQ截图20220313000643.jpg QQ截图20220313000718.jpg QQ截图20220313000747.jpg

安装

环境要求

常规安装

  1. 访问项目地址:https://gitee.com/tznb/OneNav 下载最新版本并解压到站点根目录
  2. 访问您的站点首页会自动进入安装引导,填写您要设置的管理员账号密码点击开始安装即可!
  3. 安装完成后点击链接即可进入首页或者后台 QQ截图20220313001257.jpg

从原版安装

  1. 下载最新版本并解压到站点根目录(您可以直接覆盖原版,也可以只保留data目录下的onenav.db3和config.php)
  2. 确保data目录下有原版的onenav.db3和config.php文件,访问站点首页会自动进入升级安装
  3. 升级安装会自动读取config.php中的配置,自动导入数据库!除主题配置会恢复成默认!其他数据均可保留!

特殊安装

  1. 下载最新版本并解压到站点根目录
  2. 删除主表(data/lm.user.db3):此表用户储存全局配置和账号索引
  3. 访问站点首页会进入全新安装模式
  4. 此时如果你输入的账号存在数据库时会询问您是否保留
  5. 不保留:将删除用户数据 保留:重写账号信息,书签被保留
  6. 您可以选择保留数据,安装完毕后进入后台>网站管理>用户管理> 点击:修复/升级 QQ截图20220313071931.jpg
  7. 后台会自动扫描data目录下的数据库文件,当检测到主表没有该账号时会自动导入数据(用户账号密码等保持不变) QQ截图20220313072140.jpg

注意:新手请注意权限问题,否则可能提示权限原因安装失败,宝塔、Oneinstack、lnmp.org的站点用户均为www,可通过ls -l 站点路径查看文件是否是www用户。

安全设置

如果您使用得Nginx,请务必将以下规则添加到站点配置中,否则数据库可能被下载(非常危险):

#安全设置
location ~* ^/(class|controller|initial|data|templates)/.*.(db3|php|php5|sql)$ {
    return 403;
}
location ~* ^/data/upload/.*.html$ {
        deny all;
}

#伪静态
rewrite ^/click/(.*) /index.php?c=click&id=$1 break;
rewrite ^/api/(.*)?(.*) /index.php?c=api&method=$1&$2 break;
rewrite /login /index.php?c=login break;
rewrite ^/(.*)/index.php /index.php?u=$1 break;

用户名密码是多少?

通常是admin,但2022年03月08日之后的版本是安装时候您自己设置的!

忘记管理员账号密码了?

Docker 安装

安装准备

  1. 准备一个文件夹,用于存放资源
  2. 下载OneNav Extend版,解压到文件夹根目录

QQ截图20220602111811.jpg

  1. 执行部署命令

Docker部署命令

docker run -itd --name="onenav_extend" -p 8080:80 \
    -v /volume1/docker/onenav:/data/wwwroot/default \
    tznb/onenav_extend
  1. 执行成功后浏览器打开 http://ip:8080 即可进入Web安装引导

QQ截图20220316215654.jpg

群晖安装

在注册表中搜索 onenav_extend ,选择tznb/onenav_extend,版本选择 latest。

在 docker 文件夹中,创建一个新文件夹,并将其命名为 onenav

文件夹 装载路径 说明
docker/onenav /data/wwwroot/default 存放程序和数据

端口不冲突就行,这里用了 9680

本地端口 容器端口
9680 80

注: 环境变量设置账号密码OneNav Extend版用不着,所以不需要设置! 直接打开网页 就可以看到安装引导了! 保存并运行,在浏览器中输入 http://群晖IP:9680,就可以看到主界面了

使用说明

OneNav使用说明

使用说明

入门

后台使用

后台登录地址为:http://domain.com/index.php?c=login

或者点击首页顶部按钮。

img

添加分类

点击导航菜单 - 添加分类进行操作,下方演示添加一个“测试分类”如下截图。

img

分类名称图标设置

分类名称支持Font Awesome 4图标,可前往:https://fontawesome.dashgame.com/ 选择喜欢的图标(V4版本)。然后尝试将字体图标设置为:fa fa-book,并访问前台查看效果。

添加链接

点击导航菜单 - 添加链接进行操作,如下图。

img

前台说明

私有分类后面会显示一把小绿锁,并且该分类及下面的链接对访客不可见。

img

如果是私有链接,底部会有一条橙色线条,且该链接对访客不可见。

img

快速添加链接

如果您使用的默认主题,并以管理员身份登录后,右下角会出现“+”按钮,点击可快速添加链接。

img

右键菜单(快速编辑)

鼠标移动到某个链接上面,并单击鼠标右键,即可弹出右键菜单,可快速编辑、删除、显示二维码,复制原始链接等操作。(仅默认主题支持)

img

使用说明

更换主题

简约主题

↓ 2022/05/22 之前的版本 ↓

OneNav主题位于templates目录下,如果您不喜欢默认主题,可自行开发或者使用第三方主题。

更换主题方法

魔改版已集成多个主题可以直接在后台主页设置进行更改

因大量修改导致无法直接使用原版的第三方主题

如需适配可以联系我或参照适配手册

适配手册

需有一定的基础才能完成修改!
头部相关
<title><?php echo getconfig('title');?></title>
<?php $keywords=getconfig("keywords"); if($keywords !=''){echo '<meta name="keywords" content="'.$keywords.'"/>'."\n";}?>
<?php $description=getconfig("description"); if($description !=''){echo '<meta name="description" content="'.$description.'"/>'."\n";}?>
<?php $head=getconfig("head");if($head!=''&& ($Diy==='1' || $userdb['Level']==='999')){echo(htmlspecialchars_decode(base64_decode($head)));} //自定义头部代码?> 

templates/<?php echo TEMPLATE; ?>
替换
<?php echo $Theme?>

logo连接/改为 ./?u=<?php echo $u?> 或者改成空""

"https://libs.xiaoz.top/font-awesome/4.7.0/css/font-awesome.css"
改成
"<?php echo $libs?>/Font-awesome/4.7.0/css/font-awesome.css"

"/index.php
后台连接/index.php?c=admin
改为./index.php?c=admin&u=<?php echo $u?>

登陆连接/index.php?c=login 
"./index.php?c=<?php if($login =='login'){echo $login;}else{echo $Elogin;}?>&u=<?php echo $u?>"
如果需要支持入口开关则需要加入判断
<?php if(getconfig('GoAdmin')  == 'on'  ){?>
///代码
<?php } ?>

导航分类和连接分类
#category-
<a href="#category-<?php echo $category['id']; ?>"><?php echo geticon($category['Icon']).$category['name'];?></a>
注意class需要和原来一样.如果没有就忽略
<div class="site-type" id="category-<?php echo $category['id']; ?>"><?php echo geticon($category['Icon']).$category['name']; ?><?php echo $property; ?></div>

连接需要适配直连模式
$linkURL=getconfig('urlz')  == 'on' ? $link['url'] :'./index.php?c=click&id='.$link['id'].'&u='.$u;

图标需要适配自定义
<img src="https://favicon.rss.ink/v1/<?php echo base64($link['url']); ?>">
改为
<img src="<?php if (getconfig('LoadIcon')  == 'on'  ){echo geticourl($IconAPI,$link['url']);}else{echo $libs.'/Other/default.ico';} ?>">

底部版权
<?php if($ICP != ''){echo '<a href="https://beian.miit.gov.cn" target="_blank">'.$ICP.'</a>';} ?>
<?php $footer=getconfig("footer"); if($footer != ''&& ($Diy==='1' || $userdb['Level']==='999')){echo(htmlspecialchars_decode(base64_decode($footer)));} ?>
<?php if($Ofooter != ''){echo $Ofooter;} //公用底部?>

快速添加和返回顶部 参考
<?php //<!--右下角-->
$gotop=getconfig("gotop");
$quickAdd=getconfig("quickAdd");
$on=$quickAdd=='on'||$gotop =='on';
if($on){echo '<div class="tool-bars">';}
if($on&&$is_login&&$quickAdd=='on'){echo '<p class="bs-addUrl"><i class="fa fa-plus" title="快速添加"></i></p>';}
if($on&&$gotop=='on'){echo '<p class="scroll_top"><i class="fa fa-chevron-up" title="返回顶部"></i></p>';}
if($on){echo '</div>';}
?>

确保将所有的/index.php
改成./index.php 否则二级目录无法运行

js相关
如果主题存如:快速添加,编辑,删除等操作时
在index.php底部添加
<script>
var u = '<?php echo $u?>';
</script>
在js文件修改相关连接
/index.php前面加点适应二级目录运行,连接后面加上 +'&u='+u
使用说明

书签导入

0.9.11版本开始,支持将Chrome/FireFox/Edge等浏览器书签导入到OneNav,导入前建议先将数据库(data/onenav.db3)进行备份。

从Google Chrome导入

按快捷键Ctrl + Shift + O打开Chrome书签管理器(或者地址栏输入chrome://bookmarks/),点击右上方三个点的按钮。

img

将书签导出为.html 并记住导出位置,稍后导入需要使用。

img

打开OneNav后台 - 链接管理 - 书签导入 - 选择刚刚导出的.html书签。按照下图顺序进行操作。

img

导入成功后看到如下提示。

img

从Firefox导入

输入快捷键Ctrl + Shift + B打开我的足迹,选择所有书签 - 导出书签到HTML进行保存。

img

然后打开OneNav后台 - 链接管理 - 书签导入 - 选择刚刚导出的.html书签。按照下图顺序进行操作。

img

从Edge导入(chromium)

在浏览器标签页输入edge://favorites/ - 打开收藏夹 - 导出收藏夹。

img

然后打开OneNav后台 - 链接管理 - 书签导入 - 选择刚刚导出的.html书签。按照下图顺序进行操作。

img

补充说明

目前仅支持.html格式导入,Chrome/Firefox/Edge测试通过,理论上支持所有chromium内核浏览器,具体请自行测试,不保障所有浏览器书签均能导入成功,导入前请将数据库进行备份。

为什么会导入失败?

  1. 书签已经存在与数据库中
  2. 书签标题为空字符
  3. 书签链接为空字符
使用说明

网站管理

QQ截图20220313084605.jpg

默认用户

注册用户

登陆入口

静态路径

ICP备案号

自定义代码

访问控制

防XSS脚本

防SQL注入

插件支持

图标API

底部代码

用户管理

使用说明

uTools插件

特别说明

由于原版是单用户支持,访问API时并未传递用户名,您设置的用户名只是用来拼接生成token

但Extend版是多用户支持,导致API接口不知道你要调取的是哪个用户的数据

为了解决这个问题,需要通过伪静态来将URL路径转换成u=xxx

使用说明

  1. 后台网站管理>插件支持>选择兼容模式1或2>保存配置
  2. 注:默认模式和兼容模式1不支持游客使用API,兼容模式2允许游客(不传递token时)访问公开连接和分类
  3. 账号管理>生成令牌>复制出来保存好

安装uTools for OneNav插件

uTools插件市场搜索“onenav”进行安装。(需uTools版本>=2.x)

img

使用

再次呼出uTools,输入其中任意关键词打开OneNav插件。关键词为:"onenav", "one","nav","bookmarks","book"

img

首次打开看到的书签是官方默认的(https://nav.rss.ink),您可以点击右下方设置按钮,设置你自己的OneNav地址:

img

设置如下截图:

img

~~ API KEY:如不填写则不会获取私有书签(兼容模式2才允不填),填写后可获取私有书签,API KEY对应后台:账号管理>生成令牌>~~

进阶

您可以在uTools偏好设置中,设置onenav快捷键,比如我这里设置的Shift + B,下次只需要直接输入Shift + B即可打开onenav插件。

img

当onenav插件输入框获得焦点时,按Ctrl + Z可清空关键字。

img

注意

使用说明

使用Chrome浏览器扩展(插件)

OneNav还支持Chrome浏览器扩展(理论上所有Chromium内核的浏览器都支持,比如Edge/傲游浏览器/QQ浏览器/搜狗浏览器/360极速浏览器),通过Chrome浏览器扩展可以快速打开和添加书签。

安装浏览器扩展

下载安装包 ,并添加到浏览器!

国产浏览器可以直接将crx拖入浏览器或双击打开crx进行安装!

部分浏览器只允许从商店安装,安装方法是开启开发者模式!加载解压的扩展!

具体操作请自行百度 xxx浏览器安装crx

设置API

Token设置在: 后台>账号管理>令牌

如果没有设置过,请点击下方的生成令牌按钮,复制保存好令牌(之后无法查看),输入原密码进行保存!

已经设置的过如果未保存可以重新点击生成令牌,之前的令牌将失效!

QQ截图20220427232221.jpg

打开Chrome浏览器右上角的“扩展程序”图标,将OneNav扩展进行固定。

这时右上方会出现一个蓝色的OneNav(书签)按钮,点击这个按钮,并选择API设置。

填写您的OneNav域名和刚刚得到的Token,并点保存按钮。(注意:OneNav域名末尾不需要/

QQ截图20220501101735.jpg

添加书签

您可以打开任意网址,然后鼠标右键 - 选择添加到OneNav书签,并保存即可。

或者点击右上角OneNav(书签)图标,然后选择添加链接按钮。

常见问题

设置API后书签不显示?

  1. 确保您的OneNav域名可以正常访问
  2. 设置API后可尝试点击刷新数据
  3. 检查域名或者Token是否设置错误

添加链接后没有显示书签? 为了减少网络请求,提高加载速度,数据会缓存到浏览器本地存储,如果添加后书签未能显示,可尝试点击“刷新数据按钮”

添加链接的时候所属分类是空的?

  1. 请检查API设置是否正确
  2. 尝试点击“刷新数据”试试

使用说明

找回密码&恢复默认配置

哪些情况可以使用

怎么找回密码

使用方法

下面是备份的脚本内容,如果你改乱了可以从这里复制
<!DOCTYPE html>
<head>
    <meta charset="utf-8"/>
    <title>站长应急脚本</title>
</head>
<?php
exit('<h3>您无权访问</h3>'); //要使用此脚本时是去掉前面的// 不用时请加上//注释掉!

//此文件特定情况使用,例如丢失管理权限时,将指定用户设为管理员的脚本!
//全局配置错误导致无法使用时,忘记入口等等!可以通过此脚本来恢复默认值!

//如果要使用请将上面的exit注释掉(exit前面加//)

//用完请恢复注释(去掉exit前面的//),否则存在非常严重的安全隐患!
//用完请恢复注释(去掉exit前面的//),否则存在非常严重的安全隐患!
//用完请恢复注释(去掉exit前面的//),否则存在非常严重的安全隐患!

//修改好相关数据后访问 http://域名/initial/SetAdmin.php



//载入数据库框架(不要动)
require ('../class/Medoo.php');
//载入数据库(不要动)
$db = new Medoo\Medoo(['database_type'=>'sqlite','database_file'=>'../data/lm.user.db3']);

//(按需) 修改全局配置(恢复默认值),请按需修改!不需要的话就注释掉!
$db->update('config',['Value' => 'login'],['Name' => 'Login']);  //登陆入口 (入口忘记了?) http://域名/index.php?c=login
$db->update('config',['Value' => './static'],['Name' => 'Libs']); //静态路径(改错路径或者无法访问造成异常时需要恢复默认)
$db->update('config',['Value' => 'Register'],['Name' => 'Register']); //注册入口 http://域名/index.php?c=Register
$db->update('config',['Value' => '1'],['Name' => 'Reg']); //允许注册 (开放注册)
$db->update('config',['Value' => '1'],['Name' => 'Visit']);  //允许访问 (如果需要注册则必须开启 1=开启)
echo '<h3>全局配置修改,请检查是否成功!</h3>';


//(按需)  下面是设置管理员的
//return; // 不设置管理员,只修改全局配置的话把这里注释掉

$user = 'admin'; //需要设为管理员的账号
//查找用户 (不要动)
$ud = $db->get("user","*",["User"=>$user]);
if($ud["User"]==''){exit('<h3>没有找到用户,请先注册!</h3>');}

//设置权限 (不要动)
$Re = $db->update('user',['Level'=> '999' ],['ID' => $ud["ID"]]);
if($Re->rowCount() == 1){
    echo '<h3>已将'.$user.'设为管理员! 为了您的网站安全,请立即恢复注释或删除此文件,t:'.time().'</h3>';
}else{
    echo '<h3>设置管理员账号失败,t:'.time().'</h3>';
}


?>

使用说明

默认主题(加强)说明

卡片数量

指的是分辨率足够大(2560)的情况下横向显示的卡片数量

除最多4张外,其他选项最高支持到2560(横向像素)

透明背景

将背景色改为transparent或者 rgba(255,255,255,0.2)

前者是直接透明,后者是白色背景透明,后面的0.2是透明度(范围0.00-1.00)

也可以用黑色背景透明 rgba(0,0,0,0.2)其他颜色用的少,可以自己配rgb

头部背景和卡片背景都可以设为透明色

背景图URL

可以填URL完整地址,也可以只填//xxx.xxx

可以使用随机背景图API ,可以百度下

例如

  1. (HTTP) http://api.btstu.cn/sjbz/?lx=dongman
  2. (HTTPS) https://api.btstu.cn/sjbz/?lx=dongman
  3. (跟随) //api.btstu.cn/sjbz/?lx=dongman

建议使用跟随,即你的站点是https时图片也是https

使用说明

主题开发相关说明

头部相关

正文相关

id #分类id
name #分类名
add_time #添加时间 
up_time #修改时间
weight #权重
property #0=共有 1=私有
description #描述
Icon #字体图标(OneNav Extend)
font_icon #字体图标 (原版的字段,Extend不使用此字段,只是为了兼容数据库迁移!)
fid #父级分类的id (二级分类的id)
注释:除了字体有差别外,其他字段和原版一样的!
id  #链接id
fid #链接的分类id
title #标题
url #URL
description  #描述 
add_time  #添加时间
up_time   #修改时间
weight  #权重
property #0=共有 1=私有
click  #点击次数
topping #1为置顶 暂未使用该字段!
url_standby  #备用URL链接
iconurl  #自定义图标URL地址
注释:网页渲染中用的字段也就那几个,大多数都是后台列表中在用!
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title><?php echo $site['Title'];?></title>
  <?php if($site['keywords'] !=''){echo '<meta name="keywords" content="'.$site['keywords'].'"/>'."\n";}?>
  <?php if($site['description'] !=''){echo '<meta name="description" content="'.$site['description'].'"/>'."\n";}?>
  <link rel="stylesheet" href="<?php echo $libs?>/Layui/v2.6.8/css/layui.css">
  <link rel="stylesheet" href="<?php echo $libs?>/Font-awesome/4.7.0/css/font-awesome.css">
  <link rel="stylesheet" href="<?php echo $Theme?>/index.css?t=<?php echo $version ?>">
  <?php echo $site['custom_header']; ?>
</head>

页脚相关

<footer >
    <?php if($ICP != ''){echo '<a href="https://beian.miit.gov.cn">'.$ICP.'</a>';} ?>
    <?php echo $site['custom_footer']; ?>
    <?php echo $Ofooter; ?>
</footer> 

多用户适配

<script>
var u = '<?php echo $u?>';
</script>

升级 && 更新

查看版本号

打开站点根目录下的version.txt可查看当前版本号,或者登录后台可以看到。 QQ截图20220313082249.jpg

常规升级

  1. 访问项目地址:https://gitee.com/tznb/OneNav 下载最新版本并解覆盖到站点根目录
  2. 管理员账号进入后台>网站管理>用户管理> 点击:修复/升级 若有日志则在继续点击,直到提示无可修复!通常不超过3次!

其它说明

API

OneNav API使用说明。注:此处列表不是最新的,也不是最全得!如需帮助请直接联系我!

API

Token生成

通过API创建、修改、删除分类/链接时必须传递token参数,下面介绍如何拼接计算token

进入后台>账号设置,输入原密码点击生成令牌,复制好令牌,点击保存!

令牌可以使用自动生成的(32位随机字符串),也可以自定义输入!条件是不能低于32位!

与原版不同的是token不需要在进行拼接计算md5 可以直接使用!

令牌(token)等同于账号密码,请勿泄露!

当插件支持设为兼容模式时,API将允许与原版的计算方式得出的token通过验证!即用户名+令牌的MD5

QQ截图20220313083542.jpg

API

重点说明

API

创建分类目录

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
name 测试分类 string 分类名称
weight 0 int(1) 分类权重,取值0-99
property 0 int(1) 是否私有,0:公开(默认),1:私有
description string 分类描述

请求成功响应

{
	"code": 0,
	"id": 21
}

请求失败响应

{
	"code": -1000,
	"err_msg": "Categorie already exist!"
}
API

修改分类目录

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
id 21 int 分类ID
name 测试分类 string 分类名称
weight 0 int(1) 分类权重,取值0-99
property 0 int(1) 是否私有,0:公开(默认),1:私有
description string 分类描述

请求成功响应

{
	"code": 0,
	"msg": "successful"
}

请求失败响应

{
	"code": -1000,
	"err_msg": "Categorie already exist!"
}
API

删除分类目录

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
id 21 int 分类ID

请求成功响应

{
	"code": 0,
	"msg": "successful"
}

请求失败响应

{
	"code": -1007,
	"err_msg": "The category delete failed!"
}
API

查询分类目录列表

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成

请求成功响应

{
	"code": 0,
	"msg": "",
	"count": 6,
	"data": [
		{
			"0": "8",
			"1": "<i class=\"fa fa-external-link\"></i> 常用链接",
			"2": "1607747674",
			"3": "1607865180",
			"4": "99",
			"5": "0",
			"6": "",
			"id": "8",
			"name": "<i class=\"fa fa-external-link\"></i> 常用链接",
			"add_time": "1607747674",
			"up_time": "1607865180",
			"weight": "99",
			"property": "0",
			"description": ""
		},
		{
			"0": "19",
			"1": "<i class=\"fa fa-html5\"></i> 站长工具",
			"2": "1607866471",
			"3": "",
			"4": "80",
			"5": "0",
			"6": "",
			"id": "19",
			"name": "<i class=\"fa fa-html5\"></i> 站长工具",
			"add_time": "1607866471",
			"up_time": "",
			"weight": "80",
			"property": "0",
			"description": ""
		},
		{
			"0": "3",
			"1": "<i class=\"fa fa-linux\"></i> 运维工具",
			"2": "1607699882",
			"3": "1607865657",
			"4": "80",
			"5": "0",
			"6": "",
			"id": "3",
			"name": "<i class=\"fa fa-linux\"></i> 运维工具",
			"add_time": "1607699882",
			"up_time": "1607865657",
			"weight": "80",
			"property": "0",
			"description": ""
		},
		{
			"0": "18",
			"1": "<i class=\"fa fa-video-camera\"></i> 视频影音",
			"2": "1607865982",
			"3": "1607866160",
			"4": "10",
			"5": "0",
			"6": "",
			"id": "18",
			"name": "<i class=\"fa fa-video-camera\"></i> 视频影音",
			"add_time": "1607865982",
			"up_time": "1607866160",
			"weight": "10",
			"property": "0",
			"description": ""
		},
		{
			"0": "4",
			"1": "<i class=\"fa fa-female\"></i> 18+",
			"2": "1607699983",
			"3": "1608046903",
			"4": "0",
			"5": "0",
			"6": "",
			"id": "4",
			"name": "<i class=\"fa fa-female\"></i> 18+",
			"add_time": "1607699983",
			"up_time": "1608046903",
			"weight": "0",
			"property": "0",
			"description": ""
		}
	]
}

请求失败响应

{
	"code": -1000,
	"err_msg": "Categorie already exist!"
}
API

查询单个链接信息

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
id 1 int 链接ID
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成

请求成功响应

{
	"code": 0,
	"data": {
		"id": "2",
		"fid": "19",
		"title": "安装文档",
		"url": "https://www.yuque.com/helloz/onenav/install",
		"description": "OneNav安装文档。",
		"add_time": "1608042226",
		"up_time": "1608042440",
		"weight": "0",
		"property": "0",
		"click": "1"
	}
}

请求失败响应

{
	"code": -1002,
	"err_msg": "Authorization failure!"
}
API

添加链接

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
url https://www.xiaoz.me string(256) 链接地址,需以http://或https://开头
title 小z博客 string 链接标题
fid 1 int 分类ID
weight 0 int(1) 分类权重,取值0-99
property 0 int(1) 是否私有,0:公开(默认),1:私有
description string 分类描述

请求成功响应

{
	"code": 0,
	"id": "35"
}

请求失败响应

{
	"code": -1011,
	"err_msg": "The URL already exists!"
}
API

修改链接

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
id 35 int 链接ID
url https://www.xiaoz.me string(256) 链接地址,需以http://或https://开头
title 小z博客 string 链接标题
fid 1 int 分类ID
weight 0 int(1) 分类权重,取值0-99
property 0 int(1) 是否私有,0:公开(默认),1:私有
description string 分类描述

请求成功响应

{
	"code": 0,
	"msg": "successful"
}

请求失败响应

{
	"code": -1008,
	"err_msg": "The title cannot be empty!"
}
API

删除链接

接口说明

请求参数

参数名称 示例值 类型 是否必须 说明
token 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
id 21 int 链接ID

请求成功响应

{
	"code": 0,
	"msg": "successful"
}

请求失败响应

{
	"code": -1010,
	"err_msg": "link id not exists!"
}
API

查询链接列表

接口说明

请求参数

参数名称 请求方法 示例值 类型 是否必须 说明
token POST 5c7d0c90cf9e0ce560956179e8e82e7d string(32) 请参考token生成
category_id POST 1 int 查询该分类下的链接
page GET 1 int 当前页码
limit GET 10 int 每页显示条数

请求成功响应

{
	"code": 0,
	"msg": "",
	"count": 30,
	"data": [
		{
			"0": "34",
			"1": "20",
			"2": "transmission",
			"3": "http://192.168.50.6:32769/transmission/web/",
			"4": "transmission",
			"5": "1608299921",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "0",
			"10": "<i class=\"fa fa-wifi\"></i> LAN",
			"id": "34",
			"fid": "20",
			"title": "transmission",
			"url": "http://192.168.50.6:32769/transmission/web/",
			"description": "transmission",
			"add_time": "1608299921",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "0",
			"category_name": "<i class=\"fa fa-wifi\"></i> LAN"
		},
		{
			"0": "32",
			"1": "19",
			"2": "顶级域名注册商",
			"3": "https://www.icann.org/registrar-reports/accreditation-qualified-list.html",
			"4": "icann认证顶级域名注册商列表。",
			"5": "1608126988",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "1",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "32",
			"fid": "19",
			"title": "顶级域名注册商",
			"url": "https://www.icann.org/registrar-reports/accreditation-qualified-list.html",
			"description": "icann认证顶级域名注册商列表。",
			"add_time": "1608126988",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "1",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "31",
			"1": "3",
			"2": "CSR文件生成工具",
			"3": "https://www.chinassl.net/ssltools/generator-csr.html",
			"4": "免费CSR生成工具,生成CSR工具,在线CSR生产工具,生成ECC CSR工具,ECC证书CSR生成工具,ECC CSR文件生成,Certificate Signing Request Generator tools",
			"5": "1608105958",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "0",
			"10": "<i class=\"fa fa-linux\"></i> 运维工具",
			"id": "31",
			"fid": "3",
			"title": "CSR文件生成工具",
			"url": "https://www.chinassl.net/ssltools/generator-csr.html",
			"description": "免费CSR生成工具,生成CSR工具,在线CSR生产工具,生成ECC CSR工具,ECC证书CSR生成工具,ECC CSR文件生成,Certificate Signing Request Generator tools",
			"add_time": "1608105958",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "0",
			"category_name": "<i class=\"fa fa-linux\"></i> 运维工具"
		},
		{
			"0": "30",
			"1": "4",
			"2": "嘿嘿,不给你看。",
			"3": "https://www.yuque.com/helloz/onenav",
			"4": "此分类是私有链接,你看不到哦。",
			"5": "1608046983",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "20",
			"10": "<i class=\"fa fa-female\"></i> 18+",
			"id": "30",
			"fid": "4",
			"title": "嘿嘿,不给你看。",
			"url": "https://www.yuque.com/helloz/onenav",
			"description": "此分类是私有链接,你看不到哦。",
			"add_time": "1608046983",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "20",
			"category_name": "<i class=\"fa fa-female\"></i> 18+"
		},
		{
			"0": "29",
			"1": "19",
			"2": "在线图片转icon格式",
			"3": "https://app.xunjiepdf.com/img2icon",
			"4": "迅捷在线图片格式转换软件免费版为您免费提供在线图片格式转换,图片转icon,图片转换成icon等免费图片格式转换服务!",
			"5": "1607869485",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "1",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "29",
			"fid": "19",
			"title": "在线图片转icon格式",
			"url": "https://app.xunjiepdf.com/img2icon",
			"description": "迅捷在线图片格式转换软件免费版为您免费提供在线图片格式转换,图片转icon,图片转换成icon等免费图片格式转换服务!",
			"add_time": "1607869485",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "1",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "28",
			"1": "19",
			"2": "在线扒站高级版",
			"3": "https://ishow.fun/",
			"4": "动态网页扒站,免费仿站,扒站工具高级版,在线扒站高级版,手机扒站,在线扒站工具,扒站软件,扒网站工具高级版,仿站工具,网站下载器,单页扒站小工具",
			"5": "1607869040",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "6",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "28",
			"fid": "19",
			"title": "在线扒站高级版",
			"url": "https://ishow.fun/",
			"description": "动态网页扒站,免费仿站,扒站工具高级版,在线扒站高级版,手机扒站,在线扒站工具,扒站软件,扒网站工具高级版,仿站工具,网站下载器,单页扒站小工具",
			"add_time": "1607869040",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "6",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "27",
			"1": "19",
			"2": "NameBeta",
			"3": "https://namebeta.com/",
			"4": "域名比价工具。",
			"5": "1607868954",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "5",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "27",
			"fid": "19",
			"title": "NameBeta",
			"url": "https://namebeta.com/",
			"description": "域名比价工具。",
			"add_time": "1607868954",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "5",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "26",
			"1": "19",
			"2": "哪煮米",
			"3": "https://www.nazhumi.com/",
			"4": "哪煮米是一家专业的域名比价平台,提供超过1500种域名后缀,超过50家全球域名注册商的在线比价,一键选到你满意的注册商",
			"5": "1607868904",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "6",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "26",
			"fid": "19",
			"title": "哪煮米",
			"url": "https://www.nazhumi.com/",
			"description": "哪煮米是一家专业的域名比价平台,提供超过1500种域名后缀,超过50家全球域名注册商的在线比价,一键选到你满意的注册商",
			"add_time": "1607868904",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "6",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "25",
			"1": "19",
			"2": "Domain Availability and Price",
			"3": "https://www.domcomp.com/",
			"4": "Considering to register, renew or transfer a domain? Check domain name availability and compare domain prices for 714 extensions across 38 providers with Domcomp. You can find cheap domains to buy or get the cheapest price for your desired URL name with up-to-date coupon. Lookup and compare now!",
			"5": "1607868880",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "3",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "25",
			"fid": "19",
			"title": "Domain Availability and Price",
			"url": "https://www.domcomp.com/",
			"description": "Considering to register, renew or transfer a domain? Check domain name availability and compare domain prices for 714 extensions across 38 providers with Domcomp. You can find cheap domains to buy or get the cheapest price for your desired URL name with up-to-date coupon. Lookup and compare now!",
			"add_time": "1607868880",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "3",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		},
		{
			"0": "24",
			"1": "19",
			"2": "钻磊二级域名分发",
			"3": "https://dns.txizd.cn/",
			"4": "钻磊二级域名分发(dns.txizd.cn)成立于2019-3-2,是一家专门提供二级域名解析分发的平台,域名均免费提供使用,不收取任何费用,提供的域名当中有已备案域名和未备案域名,域名后缀多可自主选择解析,欢迎大家来钻磊域名解析网使用。",
			"5": "1607868853",
			"6": null,
			"7": "0",
			"8": "0",
			"9": "8",
			"10": "<i class=\"fa fa-html5\"></i> 站长工具",
			"id": "24",
			"fid": "19",
			"title": "钻磊二级域名分发",
			"url": "https://dns.txizd.cn/",
			"description": "钻磊二级域名分发(dns.txizd.cn)成立于2019-3-2,是一家专门提供二级域名解析分发的平台,域名均免费提供使用,不收取任何费用,提供的域名当中有已备案域名和未备案域名,域名后缀多可自主选择解析,欢迎大家来钻磊域名解析网使用。",
			"add_time": "1607868853",
			"up_time": null,
			"weight": "0",
			"property": "0",
			"click": "8",
			"category_name": "<i class=\"fa fa-html5\"></i> 站长工具"
		}
	]
}

请求失败响应

{
	"code": -1000,
	"err_msg": "Authorization failure!"
}
API

错误码对照表

所有API请求错误码可参考如下表格进行对照,如有疑问,请反馈。

code err_msg 描述
-1000 Categorie already exist! 分类目录已存在
-1002 Authorization failure! token认证失败
-1003 The category ID cannot be empty! 分类目录ID不能为空
-1004 The category name cannot be empty! 分类目录名不能为空
-1005 The category name already exists! 分类目录名已存在
-1006 The category is not empty and cannot be deleted! 分类目录不为空,无法删除
-1007 The category delete failed! 分类目录删除失败
-1008 The title cannot be empty! 链接标题不能为空
-1009 URL cannot be empty! URL不能为空
-1010 URL is not valid! URL链接不合法
-1011 The URL already exists! URL链接已经存在
-1012 link id not exists! 链接ID不存在

问答锦囊

常见问题的解决方案

问答锦囊

问题示例

  1. 检查data/upload目录权限和用户组是否正常,一般为755 www
  2. php是否禁用了copy函数
  1. 检查data目录权限和用户组是否正常,一般为755 www
  2. php是否禁用了copy函数
  1. 检查是图标设置是否选择的本地服务?
  2. 原因:书签数量多时每一个书签都会请求服务器获取图标
  3. 放宽服务器CC防火墙设置或使用第三方的图标API
  4. 其他方面暂未收到引起这个问题得,如果有请反馈(请求的接口)!
问答锦囊

反馈问题

如何正确的反馈问题

不要上来就说你这个有bug用不了啊

程序员不是神仙,医生看病还需要做各种检查来判断呢

程序员也是如此,需要了解一些基础的数据才能更好的判断问题出在哪

  1. 运行环境: Web + PHP 版本 + 系统版 例如: Nginx 1.20 + PHP 7.4 + CentOS 7.9
  2. 程序版本: 后台首页查看(无法进入后台时查看/initial/version.txt)
  3. 浏览器版本: 例如: Chrome,Edge,Firefox
  4. 遇到问题得页面地址,以及如何复现BUG
  5. 服务器是否开启了缓存,是否使用CDN服务
  6. 一键诊断报告,位于后台首页>日志输出>一键诊断
  1. 数据库是否已更新 (后台首页>日志输出 显示有:当前无可用更新 说明已更新!)
  2. 尝试清空浏览器缓存或使用无痕/小号模式或更换浏览器 (目的是排除浏览器缓存和兼容造成的问题)
  3. 如果有使用CDN服务,请到平台刷新缓存
  4. 如果开启了服务器缓存,请尝试刷新缓存或暂时关闭
  5. 如果都无法解决请提供上方的数据给我们,我们测试看看是否确实存在问题
  6. 如果我们测试没有问题则大概率是其他方面的问题,需要进一步测试
  7. 打开浏览器开发人员工具,查看控制台(Console)是否有报错,完整的截图给我们!
  8. 切换到网络(Network)界面,刷新网页,把刚才的操作重复一遍,看看是否有资源加载失败!
  9. 调用API的操作(过滤关键字 index.php?c=api ),查看服务器返回的数据是否正常!{"code":0,"msg":"xxx"}正常的!