discord.py 中的城市词典 API
Urban Dictionary API in discord.py
所以我是 API 的新手,我不知道如何解决这个问题。到目前为止,这是我的代码:
import discord
from discord.ext import commands
from aiohttp import ClientSession
class Dictionary(commands.Cog):
def __init__(self, bot):
self.bot=bot
@commands.command(
name="Urban dictionary",
aliases=["urban", "urband"]
)
async def urbandictionary(self, ctx, term):
url = "https://mashape-community-urban-dictionary.p.rapidapi.com/define"
querystring = {"term":term}
headers = {
'x-rapidapi-host': "mashape-community-urban-dictionary.p.rapidapi.com",
'x-rapidapi-key': "My Key"
}
async with ClientSession() as session:
async with session.get(url, headers=headers, params=querystring) as response:
r = await response.json()
embed = discord.Embed(title=f"First result for:{term}", description=None)
embed.add_field(name=f"{r({'definition'})}", value=None, inline=False)
def setup(bot):
bot.add_cog(Dictionary(bot))
我尝试打印“r”,然后弹出了很多 json。我该怎么做才能显示第一个定义,而且不是在终端中,而是在不和谐的聊天中?
JSON 在终端中看起来像这样:https://pastebin.com/j5TPZBeA
获取定义
你走在正确的轨道上,但你没有正确索引返回的 JSON dict
:
r({'definition'})
dict
对象不可调用,也不用大括号对它们进行索引。即便如此,根据返回的 JSON 的结构,这仍然无法让您找到定义。由于有效载荷是 缩小的 JSON,以更好的格式查看它的工具可以更容易地找出它,例如 this browser-based tool or jq
for the command-line。现在我们可以清楚地看到 JSON 的结构:
所以在这个有效载荷中,有一个名为 'list'
的根键,它包含一组定义。要获取第一个定义并将其作为字段添加到您的嵌入中:
definition = r['list'][0]['definition']
embed.add_field(name=term, value=definition, inline=False)
正在发送消息
要将此定义实际发送到文本通道,您只需调用 Cog 的 ctx
上的 send
方法,传入您的 embed
:
ctx.send(embed=embed)
所以我是 API 的新手,我不知道如何解决这个问题。到目前为止,这是我的代码:
import discord
from discord.ext import commands
from aiohttp import ClientSession
class Dictionary(commands.Cog):
def __init__(self, bot):
self.bot=bot
@commands.command(
name="Urban dictionary",
aliases=["urban", "urband"]
)
async def urbandictionary(self, ctx, term):
url = "https://mashape-community-urban-dictionary.p.rapidapi.com/define"
querystring = {"term":term}
headers = {
'x-rapidapi-host': "mashape-community-urban-dictionary.p.rapidapi.com",
'x-rapidapi-key': "My Key"
}
async with ClientSession() as session:
async with session.get(url, headers=headers, params=querystring) as response:
r = await response.json()
embed = discord.Embed(title=f"First result for:{term}", description=None)
embed.add_field(name=f"{r({'definition'})}", value=None, inline=False)
def setup(bot):
bot.add_cog(Dictionary(bot))
我尝试打印“r”,然后弹出了很多 json。我该怎么做才能显示第一个定义,而且不是在终端中,而是在不和谐的聊天中?
JSON 在终端中看起来像这样:https://pastebin.com/j5TPZBeA
获取定义
你走在正确的轨道上,但你没有正确索引返回的 JSON dict
:
r({'definition'})
dict
对象不可调用,也不用大括号对它们进行索引。即便如此,根据返回的 JSON 的结构,这仍然无法让您找到定义。由于有效载荷是 缩小的 JSON,以更好的格式查看它的工具可以更容易地找出它,例如 this browser-based tool or jq
for the command-line。现在我们可以清楚地看到 JSON 的结构:
所以在这个有效载荷中,有一个名为 'list'
的根键,它包含一组定义。要获取第一个定义并将其作为字段添加到您的嵌入中:
definition = r['list'][0]['definition']
embed.add_field(name=term, value=definition, inline=False)
正在发送消息
要将此定义实际发送到文本通道,您只需调用 Cog 的 ctx
上的 send
方法,传入您的 embed
:
ctx.send(embed=embed)