Как бы я использовал GIPHY Python API с моим ботом разногласий?
Насколько я понимаю, я могу использовать этот пример из документации GIPHY ( https://gyazo.com/1b6c0094162a54fe49029f665badf8df), чтобы открыть URL-адрес, но я не слишком понимаю его. Чтобы добавить к этому, когда я запускаю этот код, я получаю ошибку:
discord.ext.commands.errors.CommandInvokeError: Команда вызвала исключение: AttributeError: модуль 'urllib' не имеет атрибута 'urlopen'
У меня вопрос, как я могу случайно импортировать GIF из определенных тегов, когда пользователь вводит #giphy в текстовом канале
Вот мой текущий код: (Код был обновлен)
@bot.command(pass_context = True)
@commands.cooldown(1, 3, commands.BucketType.user)
async def gif(ctx, *, search):
channel = ctx.message.channel
session = aiohttp.ClientSession()
msg = await bot.send_message(channel, "**searching for " + search + "..**")
randomMessage = await bot.send_message(channel, "**showing a random image due to no images found from your search or you just didn't search anything**")
if search == "":
randomImage = True
print("random")
randomMessage
response = await session.get("https://api.giphy.com/v1/gif/random?api_keyY=4hnrG09EqYcNnv63Sj2gJvmy9ilDPx5&limit=10")
else:
msg
print("searching")
correct_search = search.replace(" ", "+")
reponse = await session.get("http://api.giphy.com/v1/gifs/search?q=" + correct_search + "&api_key=Y4hnrG09EqYcNnv63Sj2gJvmy9ilDPx5&limit=10")
data = json.loads(await reponse.text())
await session.close()
embed = discord.Embed(
description = '**showing result for ' + search + '**',
colour = discord.Colour.blue()
)
gif_choice = random.randint(0,9)
embed.set_image(url=data["data"][gif_choice]["images"]["original"]["url"])
if randomImage:
await bot.delete_message(randomMessage)
else:
await bot.delete_message(msg)
await bot.send_message(channel, embed=embed)
Спасибо
1 ответ
Ответ, который дает API, отформатирован как json. Вам нужно проанализировать его, чтобы найти URL, который вы хотите вставить. После загрузки это будет словарь на python.
Приведенный ниже код является примером того, как это сделать. Он вызовет API giphy, вернет первые 10 результатов и случайным образом выберет результат в качестве сообщения.
Обратите внимание, что aiohttp
используется как асинхронный, то есть он не будет блокировать ваш код. Я также изменил команду, чтобы вы могли искать что угодно. Чтобы соответствовать вашему предыдущему URL-адресу запроса, вы можете использовать !giphy ryan gosling
, Если пользователь не указывает значение для поиска, вместо него будет использоваться случайная конечная точка.
from discord.ext import commands
import discord
import json
import aiohttp
import random
client = commands.Bot(command_prefix='!')
@client.command(pass_context=True)
async def giphy(ctx, *, search):
embed = discord.Embed(colour=discord.Colour.blue())
session = aiohttp.ClientSession()
if search == '':
response = await session.get('https://api.giphy.com/v1/gifs/random?api_key=API_KEY_GOES_HERE')
embed.set_image(url=data['data']['images']['original']['url'])
else:
search.replace(' ', '+')
response = await session.get('http://api.giphy.com/v1/gifs/search?q=' + search + '&api_key=API_KEY_GOES_HERE&limit=10')
gif_choice = random.randint(0, 9)
embed.set_image(url=data['data'][gif_choice]['images']['original']['url'])
data = json.loads(await response.text())
await session.close()
await client.send_message(embed=embed)
client.run('token')
Кроме того, кажется, что дискорд изначально поддерживает giphy. Пока я проводил тестирование, он уже сделал свои собственные гипсовые звонки. Я проверил это, используя несколько разных символов (!, ~, ') И пробел, и это, кажется, всегда работает. Смотрите ниже примеры.