send_photo方法不允许从本地api发送图片给用户

The send_photo method does not allow sending a picture from the local api to the user

在使用send_photo()方法时出现了这样的问题,也许有人知道一个简洁的解决方案。

有一个存储新闻的本地api,它有一个带有图像url的字段。

使用 get 请求获取此数据没有任何问题,但将图片的 url 传递给 send_photo 方法我的机器人挂起。

我得出的结论是send_photo通过telegram服务器url搜索图片,因此在网上找不到本地api的图片。

如何正确纠正?

有一个想法是从 API 下载图片到一个单独的文件夹,然后从那里传输到 send_photo 方法,然后从存储中删除它们,但在我看来有一个更简单的解决方案。

另外,我还不知道url如何在python中下载图片。这种方法也会出现这个问题。

async def get_news(message : types.Message):
  try:
    if message.text.lower() == 'news':
      r = requests.get("http://127.0.0.1:8000/api/news")
      data = r.json()

      storageURL = "http://127.0.0.1:8000/storage/"
      photoURL = ""

      i = 0
      while i < len(data):
        photoURL = storageURL + data[i]["preview"]
        await bot.send_photo(
          chat_id=message.chat.id, 
          photo=photoURL, 
          caption=data[i]["title"]
        )
        i += 1
  except Exception as ex:
    print(ex)

我通过下载和删除图片终于解决了问题。 也许我的方式并不漂亮,但它有效。 我希望它对某人有用。

from aiogram.types.input_file import InputFile
import os

async def get_news(message : types.Message):
  try:
    if message.text.lower() == 'news':
      r = requests.get("http://127.0.0.1:8000/api/news")
      data = r.json()

      storageURL = "http://127.0.0.1:8000/storage/"

      i = 0
      while i < len(data): 
        photoURL = storageURL + data[i]["preview"]

        p = requests.get(photoURL)
        newsId = data[i]["id"]

        out = open(f"{newsId}.jpg", "wb")
        out.write(p.content)
        out.close()

        photo = InputFile(f"{newsId}.jpg")

        await bot.send_photo(
          chat_id=message.chat.id, 
          photo=photo,
          caption=data[i]["title"]
        )
 
        os.remove(f"{newsId}.jpg")
        i += 1
        
  except Exception as ex:
    print(ex)