2016-02-14 152 views
3

所以我有一個不協調的機器人,我正在玩Python學習。我有一個下載圖像並編輯/合併它們的命令,然後將編輯後的圖像發送給聊天。我以前使用requests來做到這一點,但是我被其中一位圖書館開發者告知discord.py我應該使用aiohttp而不是requests。我找不到如何在aiohttp下載圖片,我試過了一堆東西,但沒有一個可以工作。如何用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) 

是我現在所擁有的,但仍然不起作用。

那麼,有沒有辦法下載圖片?

+0

您以前'session.get錯過'await'(數據[「card_image 「])'。 'cardsave'是一個響應,而不是類似文件的對象。您應該將響應中的字節主體手動複製到文件。 –

回答

5

所以我想通了,前一陣子:

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) 

我得到的迴應,而不是一個圖像響應