Video yuklab oluvchi Telegram bot qanday yoziladi
Havola kiradi, video chiqadi — bunday bot, agar havolani yechish boshqa birovning ishi bo'lsa, qirq qatorga sig'adi. Bu qo'llanma butun yo'lni ko'rsatadi: havoladan media manziligacha, media manzilidan Telegram xabarigacha, va ishlab turgan botda buziladigan uch narsa — yopiq postlar, Telegram o'zi ola olmaydigan fayllar va bir xil videoni yuz marta qayta yuborish.
Yangilangan
Ikki kutubxonani o'rnating
aiogram Telegram bilan, httpx esa API bilan gaplashadi. Sizning tomoningizda boshqa hech narsa kerak emas: na skreping to'plami, na headless brauzer, na tirik ushlab turiladigan cookie.
Terminalpip install aiogram httpx
Havolani yeching
Kalit Authorization sarlavhasida bo'lgan bitta GET. Endpoint platformani havolaning o'zidan aniqlaydi, ya'ni bot domen bo'yicha shoxlanmaydi — Instagram reel ham, TikTok video ham, Likee klip ham shu bitta funksiyadan o'tadi.
Pythonimport httpx
API = "https://api.saveapi.org/v1/download"
KEY = "sk_live_xxxx"
client = httpx.AsyncClient(timeout=30)
async def resolve(link: str) -> dict:
r = await client.get(
API,
params={"url": link},
headers={"Authorization": f"Bearer {KEY}"},
)
return r.json()Mediani qaytarib yuboring
Javobning o'zi nima kelganini aytadi. Video deb o'ylamasdan medias[0].type ni tekshiring: TikTok slayd-shousi va Instagram karuseli rasm bo'lib keladi, bot esa ular uchun boshqa metodni chaqirishi kerak. meta.title esa yaxshi izoh bo'ladi.
Pythonfrom aiogram import Bot, Dispatcher, F
from aiogram.types import Message
dp = Dispatcher()
@dp.message(F.text.startswith("http"))
async def on_link(message: Message):
data = await resolve(message.text.strip())
if not data["success"]:
await message.answer(EXPLAIN.get(data["error"]["code"], "Try another link."))
return
media = data["medias"][0]
if media["type"] == "video":
await message.answer_video(media["url"], caption=data["meta"]["title"])
else:
await message.answer_photo(media["url"])Odam tushunadigan xato matnini yozing
Foydalanuvchilar kun bo'yi yopiq post va o'lik havola tashlaydi. Barqaror xato kodlarini odam tilidagi gaplarga bog'lang — "Bu akkaunt yopiq" degan bot boshqa havola oladi, "Error 403" degan bot esa jahldor xabar oladi. Yopiq post va topilmagan media to'liq 1.5 emas, 0.1 kredit turadi.
PythonEXPLAIN = {
"PRIVATE_CONTENT": "That account is private — I can only fetch public posts.",
"MEDIA_NOT_FOUND": "That post has no media, or it was deleted.",
"UNSUPPORTED_PLATFORM": "I do not know that site yet.",
"QUOTA_EXCEEDED": "Out of credits for today.",
"UPSTREAM_TIMEOUT": "The source was slow. Send the link again.",
}Media manzilini emas, file_id ni keshlang
Telegram faylni bir marta olgach sizga file_id beradi va uni qayta yuborish na pul, na yuklash talab qiladi. Media manzilini saqlash noto'g'ri: manba CDN'lari havolani imzolaydi va bir necha soatda o'chiradi — ya'ni manzillar keshi ertalabgacha 403'lar keshiga aylanadi.
Pythonsent = await message.answer_video(media["url"]) file_id = sent.video.file_id # BU saqlanadi, media["url"] emas # Keyingi safar o'sha post so'ralsa: await message.answer_video(file_id)
Zaxira yo'l — baytlarni o'zingiz yuklang
Telegram havolani o'zi olishga urinadi va ba'zan manba CDN'i uni rad etadi — ko'pincha Instagram'da, media guruhda esa doim. Shu holatni ushlang, baytlarni o'zingiz yuklab, fayl sifatida joylang. 50 MB lik bot yuklash chegarasi baribir amal qiladi, shuning uchun bu asosiy yo'l emas, zaxira.
Pythonfrom aiogram.types import BufferedInputFile
async def send_bytes(message: Message, url: str):
r = await client.get(url, follow_redirects=True)
file = BufferedInputFile(r.content, filename="video.mp4")
await message.answer_video(file)Boshlashdan oldingi savollar
- Bot 50 MB dan katta fayl yubora oladimi?
- Yuklash orqali yo'q: 50 MB — bot yuklashi uchun Telegram shifti. Odatdagi yo'l — media manzilini yuborib, Telegram o'zi olishiga qo'yish yoki katta fayllarni yopiq kanalda saqlab, xabarni file_id bo'yicha ko'chirish.
- Har platforma uchun alohida handler kerakmi?
- Yo'q. /v1/download platformani havoladan aniqlaydi, ya'ni bitta handler qo'llab-quvvatlanadigan hamma saytni qoplaydi. Alohida endpointlar esa ataylab bitta platformani qabul qilmoqchi bo'lganingizda kerak bo'ladi.
- Foydalanuvchi yopiq post tashlasa nima bo'ladi?
- PRIVATE_CONTENT kodi bilan 403 keladi va to'liq 1.5 emas, 0.1 kredit yechiladi. Uni odam tilidagi gapga aylantiring: yopiq havola tashlash juda tez-tez uchraydi va odam bunda ayblik emas.
Bu yerda ishlatilgan platformalar
Boshqa qo'llanmalar
Qo'llanmani o'z kalitingiz bilan ishga tushiring
Kalit bir daqiqada. 1 000 bepul kredit, kartasiz, muddatsiz.