'How to send image by URL with telegram API using python?

I have the following code to send image, but I can send only local images, how can I send image by specifying just URL?

from PIL import Image
import requests

img = open("https://images.unsplash.com/photo-1498050108023-c5249f4df085?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1172&q=80")

TOKEN = "token"
CHAT_ID = "@channel_id"

url = f'https://api.telegram.org/bot{TOKEN}/sendPhoto?chat_id={CHAT_ID}'


print(requests.get(url, files={'photo': img}))

How can I send image by link?

Thank you in advance.



Solution 1:[1]

You could do something like this:

import io
from PIL import Image
import requests

TOKEN = "token"
CHAT_ID = "@channel_id"
url = f"https://api.telegram.org/bot{TOKEN}/sendPhoto?chat_id={CHAT_ID}"

img_url = "https://images.unsplash.com/photo-1498050108023-c5249f4df085?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1172&q=80"
response = requests.get(img_url)
img = Image.open(response.content)

# save image in memory
img_bytes = io.BytesIO()
img.save(img_bytes, format="PNG")
img_bytes.seek(0)


files = {"photo": img_bytes}
requests.post(url, files=files)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1