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)