如何从指定URL获取JSON响应并触发!test指令时返回对应数据
实现步骤
1. 从指定接口获取JSON响应
你给出的接口https://api.mathjs.org/v4/?expr=2*2是公开可直接调用的GET接口,不需要额外鉴权,不同环境下的获取方式如下:
该接口正常响应的JSON格式为{"result":"4"},你可以调用后自行核对返回结果是否正常。
- 浏览器/Node.js 原生JavaScript实现:
// 封装获取接口JSON的函数 async function getMathResult() { try { const response = await fetch('https://api.mathjs.org/v4/?expr=2*2') // 直接解析为JSON格式 const jsonResult = await response.json() return jsonResult } catch (err) { console.error('接口请求失败:', err) return { error: '请求接口失败' } } }
- Python 实现:
import requests import json def get_math_result(): try: response = requests.get('https://api.mathjs.org/v4/?expr=2*2') # 解析JSON响应 json_result = response.json() return json_result except Exception as err: print(f"接口请求失败: {err}") return {"error": "请求接口失败"}
2. 绑定!test指令触发逻辑
根据你使用的机器人框架不同,指令监听的写法有差异,核心逻辑是监听到用户输入的内容严格等于!test时,调用上面的接口获取函数,拿到结果后发送出去。
- Node.js Discord.js 框架示例:
// 监听消息发送事件 client.on('messageCreate', async (message) => { // 过滤机器人自己发的消息,避免循环触发 if (message.author.bot) return // 判断消息内容是否是!test指令 if (message.content.trim() === '!test') { const result = await getMathResult() // 把JSON结果转为格式化字符串发送 message.reply(`\`\`\`json\n${JSON.stringify(result, null, 2)}\n\`\`\``) } })
- Python NoneBot2 框架示例:
from nonebot import on_command from nonebot.adapters.onebot.v11 import MessageSegment test_matcher = on_command("test", prefixes="!") @test_matcher.handle() async def handle_test(): result = get_math_result() # 发送格式化的JSON结果 await test_matcher.finish(MessageSegment.text(f"```json\n{json.dumps(result, indent=2, ensure_ascii=False)}\n```"))
注意:如果需要在公网环境高频调用该接口,建议自行添加缓存逻辑,避免被接口方限制访问。
内容的提问来源于stack exchange,提问作者WOwNicklos
相关产品推荐
相关产品推荐

