介绍
本文使用Gitee实现Volantis主题友链功能,其中友链使用的是site标签,因为该标签可以展示图片,如
1
| {% sites repo:example.json api:https://example.dearxuan.com %}
|
友链api的最终路径为 api + “版本” + repo,如上面代码的最终路径为
1
| https://example.dearxuan.com/v1/example.json
|
其中版本可能会改变,在友链页面查看源代码,Ctrl+F搜索你的api路径即可找到最终路径
在使用前请先创建好对应文件,如上面的例子,则需要创建网站根目录/v1/example.json
PHP文件
在任意网站目录下创建php文件,如"gitee.php"(文件名随意),粘贴以下代码,其中“password”为你自己设置的密码,之后会用到
“path”为你的友链最终路径,其中__FILE__是指运行目录,通常就是你的网站的根目录,也可以改为绝对路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| <?php $password = "************************"; $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{ echo "403 Forbidden"; }
function UpdateFriends($body): void { switch ($body["action"]){ case "state_change": Update($body); break; case "open": 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(); } 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; } } } $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; } } $newJson = json_encode(array( "code" => "0", "content" => array_values($friends), ), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); file_put_contents($path, $newJson); }
|
仓库设置
导入或自建以下仓库
1
| 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页面可以看到报错,但是不影响使用