{"id":65,"date":"2025-11-30T23:33:54","date_gmt":"2025-11-30T15:33:54","guid":{"rendered":"https:\/\/blog.senru.site\/?p=65"},"modified":"2025-11-30T23:37:24","modified_gmt":"2025-11-30T15:37:24","slug":"%e5%93%aa%e5%90%92%e6%8e%a2%e9%92%88%e7%be%8e%e5%8c%96%e9%92%89%e9%92%89%e9%80%9a%e7%9f%a5","status":"publish","type":"post","link":"https:\/\/blog.senru.site\/index.php\/2025\/11\/30\/%e5%93%aa%e5%90%92%e6%8e%a2%e9%92%88%e7%be%8e%e5%8c%96%e9%92%89%e9%92%89%e9%80%9a%e7%9f%a5\/","title":{"rendered":"\u54ea\u5412\u63a2\u9488\u7f8e\u5316\u9489\u9489\u901a\u77e5"},"content":{"rendered":"\n<p class=\"has-text-align-center has-x-large-font-size wp-block-paragraph\"><strong>\u61d2\u5f97\u6392\u7248\u4e86\uff0c\u968f\u4fbf\u770b\u770b\u5427<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u73af\u5883\u51c6\u5907<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u670d\u52a1\u5668\u8981\u6c42<br>\u4e00\u53f0\u8fd0\u884c\u54ea\u5412\u63a2\u9488\u7684\u670d\u52a1\u5668<br>\u4e00\u53f0\u7528\u4e8e\u90e8\u7f72 Webhook \u670d\u52a1\u7684\u670d\u52a1\u5668\uff08\u53ef\u4ee5\u4e0e\u54ea\u5412\u63a2\u9488\u540c\u4e00\u53f0\uff09<br>Python 3.6+ \u73af\u5883<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2. \u8f6f\u4ef6\u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u5b89\u88c5 Python \u865a\u62df\u73af\u5883\nsudo apt update\nsudo apt install python3-venv python3-full -y<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00.\u90e8\u7f72 Webhook \u670d\u52a1<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u521b\u5efa\u9879\u76ee\u76ee\u5f55<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/opt\/nezha-webhook\ncd \/opt\/nezha-webhook<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u521b\u5efa Python \u865a\u62df\u73af\u5883<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 -m venv venv\nsource venv\/bin\/activate\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">3.\u5b89\u88c5 Python \u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install flask requests<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">4.\u521b\u5efa Webhook \u811a\u672c<br>\u521b\u5efa\u6587\u4ef6&nbsp;<code>\/opt\/nezha-webhook\/nezha_webhook.py<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env python3\nfrom flask import Flask, request, jsonify\nimport requests\nimport re\nimport json\nimport os\nimport logging\n\n# \u914d\u7f6e\u65e5\u5fd7\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger('nezha-webhook')\n\napp = Flask(__name__)\n\ndef format_metrics(raw_data):\n    \"\"\"\u683c\u5f0f\u5316\u76d1\u63a7\u6307\u6807\u6570\u636e\"\"\"\n    formatted = {}\n    \n    # \u683c\u5f0f\u5316CPU\u4f7f\u7528\u7387\uff08\u8f6c\u4e3a\u767e\u5206\u6bd4\uff09\n    cpu = raw_data.get('SERVER.CPU', '')\n    if cpu and cpu.replace('.', '').replace('-', '').isdigit():\n        try:\n            cpu_float = float(cpu)\n            formatted&#91;'cpu'] = f\"{cpu_float:.1f}%\"\n        except:\n            formatted&#91;'cpu'] = cpu\n    \n    # \u683c\u5f0f\u5316\u5185\u5b58\u4f7f\u7528\u91cf\uff08\u5b57\u8282\u8f6cGB\uff09\n    mem_bytes = raw_data.get('SERVER.MEM', '')\n    if mem_bytes and mem_bytes.isdigit():\n        try:\n            mem_gb = int(mem_bytes) \/ (1024 ** 3)  # \u5b57\u8282\u8f6cGB\n            formatted&#91;'mem'] = f\"{mem_gb:.2f}GB\"\n        except:\n            formatted&#91;'mem'] = mem_bytes\n    \n    # \u683c\u5f0f\u5316\u7f51\u901f\uff08B\/s \u8f6c Mbps\uff09\n    net_in = raw_data.get('SERVER.NETINSPEED', '')\n    net_out = raw_data.get('SERVER.NETOUTSPEED', '')\n    \n    if net_in and net_in.isdigit():\n        try:\n            net_in_mbps = (int(net_in) * 8) \/ 1000000  # B\/s to Mbps\n            formatted&#91;'net_in'] = f\"{net_in_mbps:.2f}Mbps\"\n        except:\n            formatted&#91;'net_in'] = net_in\n    \n    if net_out and net_out.isdigit():\n        try:\n            net_out_mbps = (int(net_out) * 8) \/ 1000000  # B\/s to Mbps\n            formatted&#91;'net_out'] = f\"{net_out_mbps:.2f}Mbps\"\n        except:\n            formatted&#91;'net_out'] = net_out\n    \n    return formatted\n\n@app.route('\/', methods=&#91;'GET'])\ndef index():\n    \"\"\"\u6839\u8def\u5f84\uff0c\u7528\u4e8e\u6d4b\u8bd5\u670d\u52a1\u662f\u5426\u8fd0\u884c\"\"\"\n    return jsonify({\n        \"status\": \"running\", \n        \"service\": \"nezha-webhook\",\n        \"endpoints\": {\n            \"health\": \"\/health (GET)\",\n            \"webhook\": \"\/webhook\/nezha (POST)\"\n        }\n    })\n\n@app.route('\/health', methods=&#91;'GET'])\ndef health_check():\n    \"\"\"\u5065\u5eb7\u68c0\u67e5\u7aef\u70b9\"\"\"\n    return jsonify({\"status\": \"healthy\", \"service\": \"nezha-webhook\"})\n\n@app.route('\/webhook\/nezha', methods=&#91;'GET', 'POST'])\ndef nezha_webhook():\n    \"\"\"\u63a5\u6536\u54ea\u5412\u63a2\u9488\u7684Webhook\"\"\"\n    try:\n        logger.info(f\"\u6536\u5230\u8bf7\u6c42: {request.method} {request.url}\")\n        \n        if request.method == 'GET':\n            # \u5bf9\u4e8eGET\u8bf7\u6c42\uff0c\u8fd4\u56de\u4f7f\u7528\u8bf4\u660e\n            return jsonify({\n                \"message\": \"\u8bf7\u4f7f\u7528POST\u65b9\u6cd5\u63d0\u4ea4\u6570\u636e\",\n                \"example\": {\n                    \"DATETIME\": \"2025-01-01 12:00:00.000000000 +0800 CST\",\n                    \"SERVER.NAME\": \"\u670d\u52a1\u5668\u540d\u79f0\",\n                    \"SERVER.IP\": \"192.168.1.100\",\n                    \"SERVER.CPU\": \"0.825516\",\n                    \"SERVER.MEM\": \"2057187328\",\n                    \"SERVER.NETINSPEED\": \"2851\",\n                    \"SERVER.NETOUTSPEED\": \"1716\",\n                    \"NEZHA\": \"\u62a5\u8b66\u6d88\u606f\u5185\u5bb9\"\n                }\n            })\n        \n        # \u5904\u7406POST\u8bf7\u6c42\n        if request.is_json:\n            raw_data = request.get_json()\n        else:\n            raw_data = request.form.to_dict()\n        \n        logger.info(f\"\u6536\u5230\u7684\u6570\u636e: {json.dumps(raw_data, ensure_ascii=False)}\")\n        \n        # \u683c\u5f0f\u5316\u65f6\u95f4\n        raw_time = raw_data.get('DATETIME', '')\n        time_match = re.match(r'(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})', raw_time)\n        formatted_time = time_match.group(1) if time_match else raw_time\n        \n        # \u683c\u5f0f\u5316\u76d1\u63a7\u6307\u6807\n        metrics = format_metrics(raw_data)\n        \n        # \u6784\u5efa\u72b6\u6001\u4fe1\u606f\u90e8\u5206\n        status_info = \"\"\n        if metrics:\n            status_parts = &#91;]\n            if 'cpu' in metrics:\n                status_parts.append(f\"\ud83d\udcbb CPU\u4f7f\u7528\u7387: {metrics&#91;'cpu']}\")\n            if 'mem' in metrics:\n                status_parts.append(f\"\ud83e\udde0 \u5185\u5b58\u4f7f\u7528: {metrics&#91;'mem']}\")\n            if 'net_in' in metrics and 'net_out' in metrics:\n                status_parts.append(f\"\ud83d\udcf6 \u5b9e\u65f6\u7f51\u901f: \u5165 {metrics&#91;'net_in']} \/ \u51fa {metrics&#91;'net_out']}\")\n            \n            if status_parts:\n                status_info = \"\\n\\n**\ud83d\udcca \u7cfb\u7edf\u72b6\u6001**\\n\" + \"\\n\".join(&#91;f\"- {item}\" for item in status_parts])\n        \n        # \u9489\u9489\u673a\u5668\u4ebaURL - \u8bf7\u66ff\u6362\u4e3a\u60a8\u7684\u5b9e\u9645token\uff01\n        dingtalk_token = \"YOUR_DINGTALK_TOKEN_HERE\"  # \u66ff\u6362\u8fd9\u91cc\uff01\n        dingtalk_url = f\"https:\/\/oapi.dingtalk.com\/robot\/send?access_token={dingtalk_token}\"\n        \n        # \u4f7f\u7528markdown\u683c\u5f0f\n        message = {\n            \"msgtype\": \"markdown\",\n            \"markdown\": {\n                \"title\": \"\ud83d\udea8 \u670d\u52a1\u5668\u72b6\u6001\u62a5\u8b66 - \u54ea\u5412\u63a2\u9488\",\n                \"text\": f\"\"\"\u54ea\u5412\u63a2\u9488\u76d1\u63a7\u62a5\u8b66\n\n### \ud83d\udea8 \u670d\u52a1\u5668\u72b6\u6001\u62a5\u8b66\n\n**\ud83d\udccb \u57fa\u672c\u4fe1\u606f**\n- \ud83d\udd50 \u65f6\u95f4\uff1a{formatted_time}\n- \ud83d\udda5\ufe0f \u670d\u52a1\u5668\uff1a{raw_data.get('SERVER.NAME', '')}\n- \ud83d\udccd IP\u5730\u5740\uff1a{raw_data.get('SERVER.IP', '')}{status_info}\n\n**\ud83d\udcdd \u62a5\u8b66\u8be6\u60c5**\n{raw_data.get('NEZHA', '')}\n\n---\n\ud83d\udca1 \u8bf7\u53ca\u65f6\u68c0\u67e5\u670d\u52a1\u5668\u72b6\u6001\"\"\"\n            }\n        }\n        \n        # \u53d1\u9001\u5230\u9489\u9489\n        response = requests.post(dingtalk_url, json=message, headers={\"Content-Type\": \"application\/json\"}, timeout=10)\n        logger.info(f\"\u9489\u9489\u54cd\u5e94: {response.status_code} - {response.text}\")\n        \n        return jsonify({\n            \"status\": \"success\", \n            \"dingtalk_response\": response.text,\n            \"formatted_metrics\": metrics\n        })\n        \n    except Exception as e:\n        logger.error(f\"\u5904\u7406\u8bf7\u6c42\u65f6\u51fa\u9519: {str(e)}\")\n        return jsonify({\"status\": \"error\", \"message\": str(e)}), 500\n\nif __name__ == '__main__':\n    logger.info(\"\u542f\u52a8\u54ea\u5412Webhook\u670d\u52a1...\")\n    app.run(host='0.0.0.0', port=5000, debug=False)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">5.\u8bbe\u7f6e\u811a\u672c\u6743\u9650<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x nezha_webhook.py<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001\u914d\u7f6e Systemd \u670d\u52a1<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u521b\u5efa Systemd \u670d\u52a1\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/systemd\/system\/nezha-webhook.service<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Nezha Webhook Service\nAfter=network.target\n\n&#91;Service]\nType=simple\nUser=root\nWorkingDirectory=\/opt\/nezha-webhook\nEnvironment=PATH=\/opt\/nezha-webhook\/venv\/bin:\/usr\/local\/bin:\/usr\/bin:\/bin\nExecStart=\/opt\/nezha-webhook\/venv\/bin\/python \/opt\/nezha-webhook\/nezha_webhook.py\nRestart=always\nRestartSec=5\nStandardOutput=journal\nStandardError=journal\n\n&#91;Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u542f\u52a8\u5e76\u542f\u7528\u670d\u52a1<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl start nezha-webhook\nsudo systemctl enable nezha-webhook\nsudo systemctl status nezha-webhook<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001\u914d\u7f6e\u9489\u9489\u673a\u5668\u4eba<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u521b\u5efa\u9489\u9489\u673a\u5668\u4eba<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uff081\uff09\u6253\u5f00\u9489\u9489\u7fa4 \u2192 \u8bbe\u7f6e \u2192 \u667a\u80fd\u7fa4\u52a9\u624b<br>\uff082\uff09\u6dfb\u52a0\u673a\u5668\u4eba \u2192 \u81ea\u5b9a\u4e49<br>\uff083\uff09\u8bbe\u7f6e\u673a\u5668\u4eba\u540d\u79f0\u548c\u5173\u952e\u8bcd<br>\uff084\uff09\u83b7\u53d6 Webhook URL \u4e2d\u7684 access_token<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u56db\u3001\u5728\u54ea\u5412\u9762\u677f\u4e2d\u914d\u7f6e Webhook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u914d\u7f6e Webhook \u53c2\u6570<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uff081\uff09<strong>URL<\/strong>:&nbsp;<code>http:\/\/\u60a8\u7684\u670d\u52a1\u5668IP:5000\/webhook\/nezha<\/code><br>\uff082\uff09<strong>\u8bf7\u6c42\u65b9\u5f0f<\/strong>:&nbsp;<code>POST<\/code><br>\uff083\uff09<strong>\u8bf7\u6c42\u7c7b\u578b<\/strong>:&nbsp;<code>JSON<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u914d\u7f6e\u8bf7\u6c42\u5934<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"Content-Type\": \"application\/json\"}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">3.\u914d\u7f6e\u8bf7\u6c42\u4f53<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{<br>\"DATETIME\": \"#DATETIME#\",<br>\"SERVER.NAME\": \"#SERVER.NAME#\",<br>\"SERVER.IP\": \"#SERVER.IP#\",<br>\"SERVER.CPU\": \"#SERVER.CPU#\",<br>\"SERVER.MEM\": \"#SERVER.MEM#\",<br>\"SERVER.NETINSPEED\": \"#SERVER.NETINSPEED#\",<br>\"SERVER.NETOUTSPEED\": \"#SERVER.NETOUTSPEED#\",<br>\"NEZHA\": \"#NEZHA#\"<br>}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">4.\u5176\u4f59\u7684\u81ea\u884c\u6309\u54ea\u5412\u6587\u6863\u914d\u7f6e<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e94\u3001\u6d4b\u8bd5\u548c\u9a8c\u8bc1<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># \u68c0\u67e5\u670d\u52a1\u72b6\u6001\nsudo systemctl status nezha-webhook\n\n# \u6d4b\u8bd5\u5065\u5eb7\u68c0\u67e5\ncurl http:\/\/localhost:5000\/health\n\n# \u6d4b\u8bd5 Webhook \u63a5\u53e3\ncurl -X POST -H \"Content-Type: application\/json\" -d '{\n  \"DATETIME\": \"2025-11-30 16:00:00.123456789 +0800 CST\",\n  \"SERVER.NAME\": \"\u6d4b\u8bd5\u670d\u52a1\u5668\",\n  \"SERVER.IP\": \"192.168.1.100\",\n  \"SERVER.CPU\": \"85.5\",\n  \"SERVER.MEM\": \"3221225472\",\n  \"SERVER.NETINSPEED\": \"6553600\",\n  \"SERVER.NETOUTSPEED\": \"3276800\",\n  \"NEZHA\": \"&#91;\u6d4b\u8bd5] \u8fd9\u662f\u4e00\u6761\u6d4b\u8bd5\u62a5\u8b66\u6d88\u606f\"\n}' http:\/\/localhost:5000\/webhook\/nezha\n\n# \u67e5\u770b\u670d\u52a1\u65e5\u5fd7\nsudo journalctl -u nezha-webhook -f\n\n# \u67e5\u770b\u5b9e\u65f6\u65e5\u5fd7\nsudo tail -f \/var\/log\/syslog | grep nezha-webhook<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u516d\u3001\u7ef4\u62a4\u548c\u7ba1\u7406<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u670d\u52a1\u7ba1\u7406\u547d\u4ee4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u542f\u52a8\u670d\u52a1\nsudo systemctl start nezha-webhook\n\n# \u505c\u6b62\u670d\u52a1\nsudo systemctl stop nezha-webhook\n\n# \u91cd\u542f\u670d\u52a1\nsudo systemctl restart nezha-webhook\n\n# \u67e5\u770b\u670d\u52a1\u72b6\u6001\nsudo systemctl status nezha-webhook\n\n# \u67e5\u770b\u670d\u52a1\u65e5\u5fd7\nsudo journalctl -u nezha-webhook -f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2.\u66f4\u65b0\u811a\u672c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uff081\uff09\u4fee\u6539&nbsp;<code>\/opt\/nezha-webhook\/nezha_webhook.py<\/code><br>\uff082\uff09\u91cd\u542f\u670d\u52a1\uff1a<code>sudo systemctl restart nezha-webhook<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6548\u679c\u5c55\u793a<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/tc.senru.site\/imgs\/2025\/11\/0ce101399b36e364.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/tc.senru.site\/imgs\/2025\/11\/0ce101399b36e364.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u61d2\u5f97\u6392\u7248\u4e86\uff0c\u968f\u4fbf\u770b\u770b\u5427 \u73af\u5883\u51c6\u5907 1.\u670d\u52a1\u5668\u8981\u6c42\u4e00\u53f0\u8fd0\u884c\u54ea\u5412\u63a2\u9488\u7684\u670d\u52a1\u5668\u4e00\u53f0\u7528\u4e8e\u90e8\u7f72 Webhook \u670d\u52a1\u7684\u670d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":4,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":70,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/posts\/65\/revisions\/70"}],"wp:attachment":[{"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.senru.site\/index.php\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}