だから私はPythonを学ぶために遊んでいる不和ボットを持っています。画像をダウンロードして編集/マージし、編集した画像をチャットに送信するコマンドがあります。以前はrequests
を使用してこれを行っていましたが、discord.pyのライブラリ開発者の1人から、aiohttp
の代わりにrequests
を使用する必要があると言われました。 aiohttp
で画像をダウンロードする方法が見つかりません。たくさんのことを試しましたが、どれも機能しません。
if message.content.startswith("!async"):
import aiohttp
import random
import time
import shutil
start = time.time()
notr = 0
imagemake = Image.new("RGBA",(2048,2160))
imgsave = "H:\Documents\PyCharmProjects\ChatBot\Images"
imagesend = os.path.join(imgsave,"merged.png")
imgmergedsend =os.path.join(imgsave,"merged2.png")
with aiohttp.ClientSession() as session:
async with session.get("http://schoolido.lu/api/cards/788/") as resp:
data = await resp.json()
cardsave = session.get(data["card_image"])
with open((os.path.join(imgsave, "card.png")),"wb") as out_file:
shutil.copyfileobj(cardsave, out_file)
私が今持っているものですが、それでも機能しません。
それで、画像をダウンロードする方法はありますか?
ファイルを書き込むときにループをロックします。 aiofilesを使用する必要があります。
import aiohttp
import aiofiles
async with aiohttp.ClientSession() as session:
url = "http://Host/file.img"
async with session.get(url) as resp:
if resp.status == 200:
f = await aiofiles.open('/some/file.img', mode='wb')
await f.write(await resp.read())
await f.close()
だから私は少し前にそれを理解しました:
if message.content.startswith("!async2"):
import aiohttp
with aiohttp.ClientSession() as session:
async with session.get("http://schoolido.lu/api/cards/788/") as resp:
data = await resp.json()
card = data["card_image"]
async with session.get(card) as resp2:
test = await resp2.read()
with open("cardtest2.png", "wb") as f:
f.write(test)
画像の応答ではなく、応答を受け取っていました