saveapi.org

grammY bilan video yuklab oluvchi Telegram bot

grammY — Telegram botlari uchun zamonaviy Node.js freymvorki, va yechish HTTP chaqiruvi bo'lgach undagi havola-video bot o'ttiz qatorcha. Bu qo'llanma — havolalarni ushlaydigan entity filtri, URL'ni to'g'ridan-to'g'ri oladigan reply metodlari, foydalanuvchi tushunadigan xato gaplari va keshlanadigan yagona narsa.

Yangilangan

O'rnatish

Faqat grammY; fetch Node 18+ da o'rnatilgan. O'rnatiladigan skreping to'plami yo'q, tirik ushlab turiladigan brauzer yo'q.

Terminal
npm install grammy

Havolani yeching

Kalit Authorization sarlavhasida bo'lgan bitta GET. AbortSignal.timeout sekin manbani handler'ingizni ushlab turishdan saqlaydi. Endpoint platformani URL'dan aniqlaydi, bot domen bo'yicha shoxlanmaydi.

JavaScript
const API = "https://api.saveapi.org/v1/download";

async function resolve(link) {
  const res = await fetch(API + "?url=" + encodeURIComponent(link), {
    headers: { Authorization: "Bearer sk_live_xxxx" },
    signal: AbortSignal.timeout(30_000),
  });
  return res.json();
}

Havolalarni ushlang va media bilan javob bering

message::url URL entity'li har qanday xabarga mos keladi; ctx.entities("url") matnini beradi. replyWithVideo va replyWithPhoto media URL'ni to'g'ridan-to'g'ri oladi — Telegram o'zi tortadi. medias[0].type ni tekshiring: slayd-shou yoki karusel — rasmlar, video emas.

JavaScript
import { Bot } from "grammy";

const bot = new Bot(process.env.BOT_TOKEN);

bot.on("message::url", async (ctx) => {
  const link = ctx.entities("url")[0].text;
  const data = await resolve(link);

  if (!data.success) {
    return ctx.reply(EXPLAIN[data.error.code] ?? "Try another link.");
  }

  const media = data.medias[0];
  return media.type === "video"
    ? ctx.replyWithVideo(media.url, { caption: data.meta?.title ?? "" })
    : ctx.replyWithPhoto(media.url);
});

bot.start();

Odamlar haqiqatan uchraydigan xatolarni tushuntiring

Foydalanuvchilar kun bo'yi yopiq post va o'lik havola yuboradi. Barqaror kodlarni gaplarga xaritalang: "Bu akkaunt yopiq" degan bot boshqa havola oladi, "xato" degan bot jahlli xabar. Yopiq va yo'q post to'liq 1.5 emas, 0.1 kredit turadi.

JavaScript
const EXPLAIN = {
  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.",
  UPSTREAM_TIMEOUT: "The source was slow. Send the link again.",
};

Media URL'ni emas, Telegram file_id'sini keshlang

Birinchi yuborishdan keyin Telegram file_id beradi; uni qayta yuborish hech narsa yuklamaydi va kredit sarflamaydi. Media URL saqlash uchun noto'g'ri narsa — CDN havolalari imzolangan va bir necha soatda eskiradi.

Boshlashdan oldingi savollar

Bot 50 MB dan katta fayl yubora oladimi?
Yuklab emas; 50 MB — bot yuklashi uchun Telegram chegarasi. Media URL'ni uzatsangiz Telegram o'zi tortadi, file_id bilan qayta yuborishda hajm narxi yo'q.
Webhook bilan ishlaydimi?
Ha — handler o'sha; faqat bot.start() webhookCallback ga o'zgaradi. Fetch timeout'ini saqlang, webhook handler'ida ham muddat bor.
Telegram URL'ni tortishdan bosh tortsa-chi?
Baytlarni o'zingiz yuklab olib InputFile sifatida yuboring. Bu ko'pincha Instagram'da va har doim media guruhida bo'ladi; uni standart emas, zaxira yo'l qilib qoldiring.

Bu yerda ishlatilgan platformalar

Boshqa qo'llanmalar

Qo'llanmani o'z kalitingiz bilan ishga tushiring

Kalit bir daqiqada. 1 000 bepul kredit, kartasiz, muddatsiz.

Kalit oling va sinab ko'ringTo'liq API ma'lumotnomasi