Python yordamida avtomatlashtirilgan Telegram Bot va Veb Parser yozish

Python yordamida avtomatlashtirilgan Telegram Bot va Veb Parser yozish

Ushbu tutorialda biz o’zi ishga tushib iqtiboslar saytiga kirib sahifadagi barcha iqtiboslar matnini to’playdigan va uni telegram bot orqali guruh yoki kanalga va albatta istalgan telegram foydalanuvchisiga (masalan o’zingizga) yuboradigan script yozamiz.

Avvalo dastur qiladigan ishlarni va muammoni ish oldidan belgilab olaylik. Deylik bizga socratify.net dan TOP iqtiboslarni o’qish yoqadi. Biz bu ishni har safar bajarishni o’rniga python orqali avtomatlashtirishimiz kerak.

Dastur quyidagi muammolarni hal qilishi kerak. 

Har kuni yuqorida ko’rsatilgan saytga tashrif buyurishi

TOP iqtiboslarni olishi

Biz uchun o’qishga qulay bo’lgan Telegram orqali tasodifiy bitta TOP iqtibosni kunning muayyan vaqtida yuborishi kerak.

Ishni boshlash uchun kerak bo’lgan modullarni kompyuterimizga o’rnatib olamiz.

Windows foydalanuvchilar uchun :

pip install bs4
pip install requests
pip install telepot
pip install schedule

MacOS yoki Linux dagilar pip3 qilish esdan chiqmasin.

Kerakli katalogda auto_quote_bot.py modulini hosil qilamiz va unga o’rnatgan modullarimizni import qilamiz;

import requests
import random
from bs4 import BeautifulSoup
from telepot import Bot
import time
import schedule

Telegram guruh ID’ingiz va Bot uchun BotFather dan olgan Bot tokenini kodda ko’rsatib olamiz va bot tokenini telepot dan keluvchi Bot() obyektga beramiz. Bu bizga bot o’zgaruvchisi ostida olgan tokenimiz yordamida Telegram Bot’imiz ustidan boshqaruvni beradi. 

group_id = "your group ID"
TOKEN = "your TOKEN"
bot = Bot(TOKEN)

Ana endi saytga so’rov yuborib veb parsing uchun xizmat qiluvchi BeautifulSoup obyektiga shu sahifamiz html kodini oddiy matn ko’rinishida uzatamiz. BeautifulSoup haqida ko’proq bilmoqchi bo’lsangiz komentlarda yozib qoldiring. Xozirga esa biz bilishimiz kerak bo’lgan narsa shuki ushbu modul xml, html kodlar orasidan ma’lumotlarni chiqarib olish, topish uchun ishlaydi.

page = requests.get("https://socratify.net/quotes/best")
soup = BeautifulSoup(page.text, "html.parser")

soup’da sahifamizni oddiy matn ko’rinishidagi va BeautifulSoup obyektni namunasi olingan.

Endi esa biz uni ichidan a teglari ichida bo’lgan iqtibos matnlarini topib alohida massivda saqlaymiz, bu ishlarni bajaruvchi get_quotes funktsiyasini yozib olamiz;

def get_quotes():
  data_quotes = soup.findAll(
    "a", class_="b-list-quote2__item-text js-quote-text")
  quotes = []
  for i in data_quotes:
    quotes.append(i.text)
  bot.sendMessage(group_id, random.choice(quotes))

quotes massivida olingan iqtiboslarni matnlari saqlansa:

bot.sendMessage(group_id, random.choice(quotes)) da biz bot orqali shulardan tasodifiy bittasini guruhimizga jo’natib yuboramiz.

Bu funktsiyamiz kunniy aniq vaqtida va har kuni ishga tushish uchun schedule modulidan foydalanamiz. while orqali to’xtovsiz sikl hosil qilib quyidagi buyruqlarni beramiz: 

schedule.every().day.at("10:30").do(get_quotes)
while True:
  schedule.run_pending()
  time.sleep(1)

Bu bilan biz yuqorida keltirilgan muammolarimizga yechim toptik endi ushbu kod har kuni soat 10:30 da iqtiboslar saytiga kirib iqtiboslarni oladi va biz ko’rsatgan guruhga jo’natadi. 

Eslatma va suv ostida ko’rinmagan toshlarimiz bor bu yerni o’qimasdan kodni ishga tushirmang!

Guruhingiz ID’sini telegramda whats my id orqali olasiz uni ishga tushirsangiz o’zi nima qilish kerak ekanligini tushintirib ketadi.

Siz schedule o’rniga thread moduli yoki shuni analoglaridan foydalansangiz ham bo’ladi.

Qo’shimcha xatoliklarga duch kelmasligingiz uchun ishlatilgan barcha modullarga ularning asosiy yo’riqnomalariga link qoldiramiz.

  • schedule 1.1.0
  • telepot 
  • bs4

Kodimizni endi avtonom ishlab turishi uchun alohida serverga yoki hostingga yuklashimiz kerak. Siz heroku yoki pythonanywhere kabi bepul hizmatlardan foydalansiz bo’ladi. Tutorial yoqdimi ? Ijtimoiy tarmoqlarimizga obuna bo’ling va uni albatta tanishlarga ulashing.

Umumiy Dasturlash
Python yordamida avtomatlashtirilgan Telegram Bot va Veb Parser yozish