как я могу получить aiohttp для вывода изображений Reddit - PullRequest
0 голосов
/ 28 апреля 2020
@commands.command(aliases=['gt'])
async def cat(self, ctx):
    """Outputs image from r/greentext"""

    async with ctx.typing():
        async with aiohttp.ClientSession() as cs:
            async with cs.get("https://www.reddit.com/r/greentext/hot/.json") as r:
                data = await r.json()

                embed = discord.Embed(title = "r/greentext", color = 0xFF0000)
                embed.set_image(url = data["url"])
                embed.set_footer(text = "r/greentext")

                await ctx.send(embed = embed)

Я знаю, что данные ["url"] должны быть правильными, поскольку именно этот файл изображения сохраняется на веб-сайте, как показано на этом снимке экрана: https://imgur.com/a/kTl0BOW весь веб-сайт json здесь: https://www.reddit.com/r/greentext/hot/.json и если кто-нибудь может мне помочь, я не могу найти сервер справки aiohttp, а сервер discord.py мне совсем не помогает, потому что все они заставляют вас чувствовать себя глупо нуждающийся в помощи

1 Ответ

0 голосов
/ 29 апреля 2020

На верхнем уровне ответа reddit нет клавиши url; изображения, на которые вы ссылаетесь, являются изображениями предварительного просмотра, и они относятся к посту, поэтому вам нужно перебрать посты и извлечь изображения:

data = await r.json()
for post in data["data"]["children"]:
    images = post.get("preview", {}).get("images", [])
    if not images:
        print("no preview images for %s..." % post["data"]["title"])
        continue
    image = images[0]  # grab the first image
    embed = discord.Embed(title = "r/greentext", color = 0xFF0000)
    embed.set_image(url = image["source"]["url"])
    embed.set_footer(text = "r/greentext")

Чтобы привыкнуть к ответам, возвращаемым reddit, вы можете открыть Ответ в JSON Просмотрщик и проанализировать их.

...