Python ile Telegram Botu Oluşturma

Telegram kullananlar bilir, en güzel özelliklerinden biri çeşitli botlara sahip olmasıdır. Telegram, kullanıcıların kendi botlarını yaratabilmesi için bir API sunuyor.

Biz de python-telegram-bot (https://github.com/python-telegram-bot/python-telegram-bot) isimli Python modülü ile sorguladığımız sitenin açık olup olmadığını denetleyen bir bot yazacağız.

Önce modülü kuruyoruz:

$ pip install python-telegram-bot --upgrade

Şimdi bir python dosyası oluşturup kodlamaya başlayalım.

İlk kullanacağımız modülleri import ediyoruz:

from telegram.ext import Updater, CommandHandler
import requests

Şimdi sitenin durumunu öğrenmek için gereken get_status() fonksiyonunu yazalım:

def get_status(url):
    r = requests.head(url)
    if (r.status_code == 200):
        return "Site ulaşılabilir durumdadır."
    else: 
        return "Siteye ulaşılamıyor."


Burada

r = requests.head(url)

diyerek siteye HEAD request çekerek tamamını çekmeden bize gerekli olan HTTP Status Code'un bulunduğu kısmı çekiyoruz.

Sonrasında r.status_code un  200'e eşit olup olmadığına bakarak sitenin durumuna dair bir yazı döndürüyoruz.

NOT: HTTP Status Code'un 200 olup olmadığına bakarak sitenin ulaşılabilirliğini denetlemek her zaman doğru sonuçlar vermeyebilir, bu nedenle HTTP Status Code ları için bir referansa bakıp ona göre hareket etmekte fayda var. 
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
https://httpstatuses.com/

Şimdi ana fonksiyonumuz olacak olan run() fonksiyonunu yazalım:

def run():
    updater = Updater('TOKEN')
    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CommandHandler('check', check, pass_args=True))
    updater.start_polling()
    updater.idle()

TOKEN yazan kısma Telegramın sizin botunuz için verdiği tokenı girmeniz gerekiyor. Bunu nasıl elde edeceğiz? Botumuzu yaratmak için BotFather isimli başka bir botla muhattap olmamamız lazım (@BotFather , döküman resminde gördüğünüz arkadaş). Muhabbete başladığınızda o sizi yönlendirecek ve 3 adımda botunuzu oluşturmuş, tokenınızı elinize almış olacaksınız.

updater nesnemize 2 tane CommandHandler ekledik:

    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CommandHandler('check', check, pass_args=True))

Burada tırnak içinde yazdığımız 'start' ve 'check' kullanıcının /komut_ismi şeklinde yazacağı komutları temsil ediyor. 2. parametre ise kullanıcı tarafından 1.parametredeki komut girildiğinde bizim kodumuzdaki hangi foknksiyonun çalışacağını gösteriyor. check için 3. bir parametre daha var ki bu da bu komutun çeşitli argümanlar alabilmesine izin veriyor.

Şimdi  start() komutuna bakalım:

def start(bot, update):
    bot.sendMessage(update.message.chat_id, text="İstediğiniz sitenin durumunu öğrenmek için /check [site_adresi] yazınız.")

CommandHandler'a eklediğimiz fonksiyonları tanımlarken bot ve update isimli 2 parametreyle tanımlamamız gerekiyor. Bu fonksiyon /start komutu girildiğinde bota yazan kullanıcıya (bkz. update.message.chat_id ) text değişkenine girdiğimiz değeri yollayacak.

Check komutumuz da şu şekilde:

def check(bot, update, args):
    bot.sendMessage(update.message.chat_id, text=get_status(args[0]))

Burada  /check komutuna gelen ilk argümanı ,yani site adresini, get_status fonksiyonuna parametre olarak verip gelen değeri text değişkenine atayıp kullanıcıya yolluyor.

Kodların son hali:

from telegram.ext import Updater, CommandHandler
import requests

def get_status(url):
    r = requests.head(url)
    if (r.status_code == 200):
        return "Site ulaşılabilir durumdadır."
    else: 
        return "Siteye ulaşılamıyor."


def start(bot, update):
    bot.sendMessage(update.message.chat_id, text="İstediğiniz sitenin durumunu öğrenmek için /check [site_adresi] yazınız.")

def check(bot, update, args):
    bot.sendMessage(update.message.chat_id, text=get_status(args[0]))

def run():
    updater = Updater('TOKEN')
    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CommandHandler('check', check, pass_args=True))
    updater.start_polling()
    updater.idle()

run()

En sonda ana fonksiyonumuzu ( run() ) çağırıyoruz.

Sonucun nasıl olduğunu görmek için son günlerde gidip gelen Tahribat'ın durumunu Telegram üstünden öğrenebilmek adına  yazılmış @TBTCheckBot u deneyebilirsiniz.

Tarih:
Hit: 1380
Yazar: Lightsaber

Taglar: python telegram telegram bot api http status code


Yorumlar


Yorum yapabilmek için üye girişi yapmalısınız.

Yorumlar

catlax66 tarafından yazıldı. Tarih: 26/Eki/16 09:41
Şöyle güzel bir bot yazında konular anlık bildirim olarak gelsin.
PLaXToR tarafından yazıldı. Tarih: 30/Eyl/16 04:36
pip install yaparken, windowsta yapılabilir mi? bu döküman hangi işletim sistemi için? ... :) yeni arkadaşlar bulamayabilir. Ama güzel anlatım eline sağlık.
Muaddib tarafından yazıldı. Tarih: 29/Eyl/16 00:30
Beğendim,deneyecegim. Sağol hoca
r10aldinho tarafından yazıldı. Tarih: 26/Eyl/16 20:18
Problemlere çözüm üretiliyor :) eline sağlık