Aiogram 3.22 + Wikipedia API
Telegram bot yaratamiz. Foydalanuvchi matn yuborsa, o'zbekcha Wikipediadan qisqa ma'lumot olib, javob qaytaradi. Barcha kod Aiogram 3.22 asosida, asinxron usulda ishlaydi.
Maqsad va Kerakli Kutubxonalar
Maqsad
Telegram bot yaratish. Foydalanuvchi matn yuborsa, o'zbekcha Wikipediadan qisqa ma'lumot olib, javob qaytaradi.
Kerakli Kutubxonalar
  • aiogram==3.22.0 – Telegram Bot API
  • wikipedia-api – Wikipedia sahifalarini olish
Terminalda o'rnatish: pip install aiogram==3.22.0 wikipedia-api
Bot Yaratish: BotFather
Qadamlar
  1. Telegramda @BotFather ga yozing
  1. /newbot buyrug'ini kiriting
  1. Bot nomini va username kiriting
  1. Token olasiz
Muhim Eslatma
Tokenni hech kimga ko'rsatmang! Bu sizning bot identifikatoringiz. Xavfsizlik uchun maxfiy saqlang.
Importlar va Asosiy Sozlamalar
Kod bilan ishlashni boshlash uchun kerakli kutubxonalarni import qilamiz va bot sozlamalarini o'rnatamiz:
import asyncio from aiogram import Bot, Dispatcher, F from aiogram.types import Message from wikipediaapi import Wikipedia TOKEN = "7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc" bot = Bot(token=TOKEN) dp = Dispatcher() wiki = Wikipedia( user_agent="WikiBot ([email protected])", language="uz" )
Handler: Matnli Xabarlarni Qayta Ishlash
Foydalanuvchi har qanday matn yuborsa, Wikipedia sahifasini izlash va javob qaytarish uchun handler yaratamiz:
@dp.message(F.text) async def wiki_handler(message: Message): query = message.text.strip() page = wiki.page(query) if page.exists(): summary = page.summary[:200] + "..." if len(page.summary) > 200 else page.summary await message.answer( f"{page.title}\n\n{summary}\n\n{page.fullurl}", parse_mode="HTML" ) else: await message.answer(f"'{query}' topilmadi.")
Kod Tushuntirish: Qator-Qator
1
Importlar
asyncio – asinxron ishlash. aiogram – Bot API. wikipediaapi – Wikipedia sahifalarini olish.
2
Bot Yaratish
TOKEN bilan Bot obyekti yaratamiz. Dispatcher xabarlarni yo'naltiradi.
3
Wikipedia Sozlamasi
user_agent – identifikatsiya. language="uz" – o'zbek tilida qidirish.
4
Handler Dekorator
@dp.message(F.text) – faqat matnli xabarlarga javob beradi.
Handler Logikasi: Qidirish va Javob
Matnni Olish
query = message.text.strip() – foydalanuvchi so'zini olamiz, bo'sh joylarni olib tashlaymiz.
Wikipedia Sahifasini Izlash
page = wiki.page(query) – o'zbek tilida Wikipedia sahifasini qidiramiz.
Natijani Tekshirish
if page.exists() – sahifa topilgan yoki yo'qligini tekshiramiz.
Javob Yuborish
summary[:200] – 200 belgigacha qisqartiramiz. HTML format bilan sarlavha qalin bo'ladi.
Botni Ishga Tushirish
Botni asinxron usulda ishga tushirish uchun main funksiya yaratamiz:
async def main(): print("Bot ishga tushdi...") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())
Faylni Saqlash
wiki_bot.py deb saqlang.
Ishga Tushirish
Terminalda: python wiki_bot.py
Botni Sinash va Natijalar
O'zbekiston
Qisqa ma'lumot chiqadi – davlat haqida Wikipedia ma'lumoti.
Toshkent
Shahar haqida ma'lumot – tarix, aholisi, joylashuvi.
Python
Inglizcha sahifa (agar o'zbek tilida bo'lmasa) yoki topilmaydi xabari.
Qo'shimcha Vazifalar va Xulosa
/start qo'shish
Salomlashuv xabari va foydalanish qo'llanmasi.
try-except qo'shish
API xatolarini ushlash va xavfsiz ishlash.
Tilni Tanlash
/lang uz yoki /lang en – tugma bilan til o'zgartirish.
To'liq O'qish
"To'liq o'qish" tugmasi – Wikipedia sahifasiga havola.
Xulosa: Aiogram – zamonaviy, tez, asinxron. Wikipedia API – bepul, oddiy. Bot – 30 qatordan kam kod bilan ishlaydi!
kod

# 1. Importlar import asyncio from aiogram import Bot, Dispatcher, F from aiogram.types import Message from wikipediaapi import Wikipedia # 2. Bot va sozlamalar TOKEN = "7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc" # <-- O'z tokeningiz bot = Bot(token=TOKEN) dp = Dispatcher() # Wikipedia (o'zbek tili) wiki = Wikipedia( user_agent="WikiBot ([email protected])", # O'z emailingizni yozing! language="uz" ) # 3. Handler: har qanday matnli xabar @dp.message(F.text) async def wiki_handler(message: Message): query = message.text.strip() # foydalanuvchi so'zi page = wiki.page(query) # Wikipedia sahifasini izlash if page.exists(): # sahifa topilsa # 200 belgigacha qisqartiramiz summary = page.summary[:200] + "..." if len(page.summary) > 200 else page.summary # Javob yuborish (HTML format) await message.answer( f"<b>{page.title}</b>\n\n{summary}\n\n{page.fullurl}", parse_mode="HTML" ) else: # sahifa topilmasa await message.answer(f"'{query}' topilmadi. Boshqa so'z kiriting.") # 4. Botni ishga tushirish async def main(): print("Bot ishga tushdi...") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())
Made with