volantis使用php实现Gitee友链

news2024/11/26 10:51:41

介绍

本文使用Gitee实现Volantis主题友链功能,其中友链使用的是site标签,因为该标签可以展示图片,如

{% sites repo:example.json api:https://example.dearxuan.com %}

 友链api的最终路径为 api + “版本” + repo,如上面代码的最终路径为

https://example.dearxuan.com/v1/example.json

其中版本可能会改变,在友链页面查看源代码,Ctrl+F搜索你的api路径即可找到最终路径

在使用前请先创建好对应文件,如上面的例子,则需要创建 网站根目录/v1/example.json

PHP文件

推荐直接下载压缩包,附带我的友链页模板,点此查看我的友链页

在任意网站目录下创建php文件,如"gitee.php"(文件名随意),粘贴以下代码,其中“password”为你自己设置的密码,之后会用到

“path”为你的友链最终路径,其中__FILE__是指运行目录,通常就是你的网站的根目录,也可以改为绝对路径

<?php
$password = "************************"; // Gitee推送密码
$path = dirname(__FILE__)."/v1/example.json"; // 友链路径

// 验证权限
$token = array_key_exists("HTTP_X_GITEE_TOKEN", $_SERVER)
    ? $_SERVER["HTTP_X_GITEE_TOKEN"]
    : "";
if($password == $token){
    //更新友链
    $body = json_decode(file_get_contents("php://input"), true);
    UpdateFriends($body);
}else{
    //返回403
    echo "403 Forbidden";
}

/** 根据不同的请求类型执行不同的函数 */
function UpdateFriends($body): void
{
    switch ($body["action"]){
        case "state_change": // 状态改变
            Update($body);
            break;
        case "open": // 新建issue
            // 不执行任何操作
            break;
        case "delete": // 删除
            Delete($body);
            break;
    }
}

/** 更新或新增友链 */
function Update($body): void
{
    $issueBody = json_decode($body["issue"]["body"], true);
    if($issueBody == null){
        echo "issue格式错误";
        return;
    }
    $result = array(
        "iid" => $body["iid"],
        "title" => $issueBody["title"],
        "url" => $issueBody["url"],
        "avatar" => $issueBody["avatar"],
        "screenshot" => $issueBody["screenshot"],
        "description" => $issueBody["description"],
    );
    //读取文件,转化为数组
    global $path;
    $str = file_get_contents($path);
    $friends = json_decode($str, true)["content"];
    if($friends == null){
        $friends = array();
    }
    //是否展示该友链,只有"closed"才要展示
    if($body["state"] == "closed"){
        //遍历数组查看是否有重复项
        foreach ($friends as $key => $value){
            if($value["iid"] == $result["iid"]){
                //找到重复,则程序结束
                echo "url:\"".$result["url"]."\"已存在";
                return;
            }
        }
        //没有重复,则添加至末尾
        $friends[] = $result;
        echo "已添加".$result["url"];
    }else{
        //不展示该友链
        foreach ($friends as $key => $value){
            if($value["iid"] == $result["iid"]){
                //删除该项
                unset($friends[$key]);
                echo "已移除".$result["url"];
                break;
            }
        }
    }
    //生成新的json,且不转义
    $newJson = json_encode(array(
        "code" => "0",
        "content" => array_values($friends),
    ), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    file_put_contents($path, $newJson);
}

/** 删除友链 */
function Delete($body): void
{
    $iid = $body["iid"];
    //读取文件,转化为数组
    global $path;
    $str = file_get_contents($path);
    $friends = json_decode($str, true)["content"];
    foreach ($friends as $key => $value){
        if($body["number"] == $iid){
            //删除该项
            unset($friends[$key]);
            echo "已删除\"".$iid."\"";
            break;
        }
    }
    //生成新的json,且不转义
    $newJson = json_encode(array(
        "code" => "0",
        "content" => array_values($friends),
    ), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    file_put_contents($path, $newJson);
}

 仓库设置

导入或自建以下仓库

https://gitee.com/dearxuan/friends.git

修改README文件,替换为自己网站的信息

其中.gitee/ISSUE_TEMPLATE.zh-CN.md文件用于存放issue模板,可以视需求修改

在仓库的 “管理”-“WebHooks” 中添加一个新的WebHook,如下图

其中URL为你的php文件的路径,WebHook密码就是上面你自己修改的密码。勾选“Issue”事件,并“激活”

使用

在issue页面新建issue,注意要确保格式正确,否则无法解析为json

修改issue的状态,其中只有“已完成”会展示。原本想用tag,但是gitee不支持issue的tag推送

在webhook页面可以看到历次请求结果

如果先修改状态再删除issue,会导致触发两次删除操作,wenhook页面可以看到报错,但是不影响使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位(经纬度坐标与平面坐标转换法求解、几何绘图法求解)

【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位&#xff08;经纬度坐标与平面坐标转换法求解、几何绘图法求解&#xff09; 众所周知&#xff0c;如果已知三个点的坐标&#xff0c;到一个未知点的距离&#xff0c;则可以利用以距离为半径画…

初学Nginx

目录 &#xff08;一&#xff09;Nginx介绍 &#xff08;二&#xff09;Nginx安装和启动 1&#xff0c;Nginx的目录结构 2&#xff0c;查看Nginx版本指令 3&#xff0c;检查配置文件是否正确 4&#xff0c;启动和关闭Nginx服务 &#xff08;三&#xff09;Nginx的配置 1&a…

智能工厂数字孪生的运用

信息技术与制造业的融合是当前的发展趋势&#xff0c;数字孪生其中 就包括了“智能工厂”的技术。在过去几年的发展中&#xff0c;我国的工业企业已经初步形成了 5 层的信息化体系结构&#xff0c;而在新一代的智能工厂体系中&#xff0c;借助数字孪生技术让工厂实现智能化生产…

SpringMVC使用Jackson、双向关联的解决策略@JsonIgnore

目录:一、SpringMVC和Jackson的关系&#xff1a;二、Jackson解决双向关联导致的栈溢出问题的解决方法&#xff1a;三、如何使用JsonIgnore&#xff1a;一、SpringMVC和Jackson的关系&#xff1a; SpringMVC返回return Object类型数据给前端时会自动调用jackson将Object类型的数…

pytorch深度学习常用命令

文章目录命令目录.item().items&#xff08;&#xff09;最大值的索引torch.argmax(input, dimNone, keepdimFalse)_, predicted torch.max(outputs.data, 1).data.detachunsqueeze()squeeze()命令目录 .item() 只是一个值 &#xff08;浮点型的&#xff09;&#xff0c;适合…

计算机基础知识(基础入门小白专属)三

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

精通MyBatis原理,看这两篇就够了!|原创

本文详细介绍了阅读MyBatis源码的学习思路&#xff0c;并且对源码做了详细注释&#xff0c;讲解了整个Mybatis的启动过程。本文篇幅较长&#xff0c;建议收藏阅读&#xff0c;非常适合用于面试前的重点复习。点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c…

BSV 上的零知识隐私机器学习

此前&#xff0c;我们已经演示了在 BSV 上运行一个成熟的深度神经网络&#xff0c;其中机器学习 (ML) 算法的输入和模型都是公开的。在实践中&#xff0c;通常希望将输入或模型保持在链下并因此保持私有&#xff0c;同时仍确保 ML 算法如实运行。我们通过将零知识证明 (ZKP) 应…

你确定没有滥用 goroutine 吗

写在前面 学习 golang &#xff0c;路还很长呢&#xff0c;犹记得刚开始学习 golang 的时候&#xff0c;写起来确实非常简单&#xff0c;有很多包和工具使用&#xff0c;不需要重复造轮子&#xff0c;但是要真的学好一门语言作为工具&#xff0c;对于其原理是非常有必要学懂的…

极限多标签学习综述(Extreme Multi-label Learning)

A Survey on Extreme Multi-label Learning 先给地址&#xff1a; https://arxiv.org/abs/2210.03968 博主曾整理过Multi-Label Image Classification&#xff08;多标签图像分类&#xff09;&#xff0c;但这类任务中所用的数据集往往较小&#xff0c;分类数量并不多。但在更…

JavaScript的原型链

JavaScript的原型链 JavaScript的继承主要是通过原型链实现的&#xff0c;所以理解原型链是掌握JavaScript继承的关键一环。原型链的继承的基本思想是通过原型链继承多个引用类型的属性和方法。 理解原型链 关于原型链的定义与理解&#xff1a; 每个构造函数都有一个原型对…

Python实现将位图描摹为彩色矢量 svg 图片的源代码,Python实现位图转彩色矢量代码

Color Trace 这是一个将位图描摹为彩色矢量 svg 图片的程序&#xff0c;是一个命令行工具&#xff0c;使用 Python 脚本实现&#xff0c;运行环境 Python3.8。 ✨ 效果 以一个字帖图片为例&#xff0c;这是 png 格式的位图&#xff08;370KB&#xff09;&#xff1a; 这是颜…

多智能体强化学习环境【星际争霸II】SMAC环境配置

多智能体强化学习这个领域中&#xff0c;很多Paper都使用的一个环境是——星际争多智能体挑战(StarCraft Multi-Agent Challenge, SMAC)。最近也配置了这个环境&#xff0c;把中间一些步骤记录下来。2022.12.26 文章目录1 环境介绍1.1 相关论文1.2 项目代码地址2 安装过程3 相关…

2023年pmp的考试时间是什么时候?(含pmp资料)

不出意外&#xff0c;按照原计划&#xff0c;就是3、6、9、12月&#xff0c;22年11月延期考试地区的考生或者退考的估计会在3月或者6月考。具体就及时关注官网消息。 ​新版中文报名网站&#xff1a;中国国际人才交流基金会 这里说一下PMP的基本考试情况&#xff1a; 【考试注…

模型实战(2)之YOLOv5 实时实例分割+训练自己数据集

模型实战&#xff08;2&#xff09;之YOLOv5 实时实例分割训练自己数据集 本文将详解YOLOv5实例分割模型的使用及从头训练自己的数据集得到最优权重&#xff0c;可以直接替换数据集进行训练的训练模型可通过我的gitcode进行下载&#xff1a;https://gitcode.net/openmodel/yolo…

使用matplotlib画图 + python色彩大全

目录画线画点散点画点的形状、线的形状画点线在特定位置写文字plt.legend()中图例的位置方法一 plt.legend(loc4)方法二 plt.legend(bbox_to_anchor(num1, num2))方法三 bbox_to_anchor(1.05, 1), loc2, borderaxespad0保存图片指定图片大小网格线根据自己的需求做了一个画图的…

图的最短路径

文章目录单源最短路径-Dijkstra算法单源最短路径--Bellman-Ford算法多源最短路径--Floyd-Warshall算法单源最短路径-Dijkstra算法 针对一个带权有向图G&#xff0c;将所有结点分为两组S和Q&#xff0c;S是已经确定最短路径的结点集合&#xff0c;在初始时为空&#xff08;初始…

如何使用监控诊断工具Arthas(阿尔萨斯)

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

【python】实现精美圣诞树-拿下女神不是梦

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Java Web基础面试题

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…