Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

Telegram'daki botlar, izleyicilerle iletişim kurmaya veya daha önce manuel olarak yapılması gereken eylemleri basitleştirmeye yardımcı olan programlardır. Bu programlar özellikle mesajlaşma platformu için yazılmıştır. Botlar şu şekilde çalışır: kullanıcı giriş satırı üzerinden bir komut gönderir ve sistem bir metin veya etkileşimli mesajla yanıt verir. Bazen program gerçek bir kişinin eylemlerini bile taklit eder - böyle bir bot müşteriler arasında daha fazla güven uyandırır.

Kullanıcılara otomatik yardım için çeşitli sistem türleri vardır. Bazı botlar sadece müşterilerle iletişim kurar, bazıları ise düzenli olarak bilgi sağlar. Programları açıkça türlere ayırmak imkansızdır - geliştiriciler genellikle birkaç işlevi tek bir botta birleştirir.

9 adımda ekran düğmeleri şeklinde etkileşimli öğeler içeren Telegram için basit bir bot yazabilirsiniz. Her birine ayrıntılı olarak bakalım ve birkaç soruyu cevaplayalım:

  • bot nasıl başlatılır;
  • bir veya daha fazla düğmeden yerleşik bir klavyenin nasıl kaydedileceği;
  • istenen işlevler için düğmelerin nasıl programlanacağı;
  • satır içi mod nedir ve mevcut bir bot için nasıl kurulur.

Adım 0: Telegram botları API'si hakkında teorik arka plan

Telegram botları oluşturmak için kullanılan ana araç, HTML Uygulama Programlama Arayüzü veya HTML API'sidir. Bu öğe, ziyaretçi isteklerini kabul eder ve bilgi biçiminde yanıtlar gönderir. Hazır tasarımlar program üzerinde çalışmayı kolaylaştırır. Telegram için bir bot yazmak için şu e-posta adresini kullanmanız gerekir: https://api.telegram.org/bot/METOD_NAME

Botun doğru çalışması için bir belirteç de gereklidir - programı koruyan ve ona güvenilir geliştiricilere erişim sağlayan bir karakter kombinasyonu. Her jeton benzersizdir. Dize, oluşturulduktan sonra bota atanır. Yöntemler farklı olabilir: getUpdates, getChat ve diğerleri. Yöntem seçimi, geliştiricilerin bottan hangi algoritmayı beklediğine bağlıdır. Jeton örneği:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Botlar GET ve POST isteklerini kullanır. Yöntem parametrelerinin genellikle eklenmesi gerekir - örneğin, sendMessage yönteminin sohbet kimliğini ve bazı metinleri göndermesi gerektiğinde. Yöntem iyileştirme parametreleri, application/x-www-form-urlencoded kullanılarak veya application-json aracılığıyla bir URL sorgu dizesi olarak iletilebilir. Bu yöntemler dosya indirmek için uygun değildir. UTF-8 kodlaması da gereklidir. API'ye istek göndererek sonucu JSON formatında alabilirsiniz. Programın getME yöntemiyle bilgi almaya verdiği yanıta bir göz atın:

https://api.telegram.org/bot'u ALIN/getMe{ ok: true, sonuç: { id: 231757398, first_name: "Döviz Kuru Botu", kullanıcı adı: "exchangetestbot" } }

Sonuç alınırsa ok eşittir gerçek. Aksi takdirde, sistem bir hata gösterecektir.

Botlarda özel mesajlar almanın iki yolu vardır. Her iki yöntem de etkilidir, ancak farklı durumlarda uygundur. Mesajları almak için getUpdates yöntemiyle manuel olarak bir istek yazabilirsiniz – program ekranda Güncelle veri dizisini görüntüleyecektir. İstekler düzenli olarak gönderilmelidir, her dizi analiz edildikten sonra gönderme tekrarlanır. Ofset, kontrol edilen nesnelerin yeniden görünmesini önlemek için yeni bir sonuç yüklemeden önce atlanan kayıtların sayısını belirleyen bir parametredir. getUpdates yönteminin faydaları şu durumlarda devreye girer:

  • HTTPS'yi yapılandırmanın bir yolu yoktur;
  • karmaşık betik dilleri kullanılır;
  • bot sunucusu zaman zaman değişir;
  • bot kullanıcılarla yüklenir.

Kullanıcı mesajlarını almak için yazılabilecek ikinci yöntem setWebhook'tur. Bir kez kullanılır, sürekli yeni istek göndermeye gerek yoktur. Web kancası, belirtilen URL'ye veri güncellemeleri gönderir. Bu yöntem bir SSL sertifikası gerektirir. Web kancası şu durumlarda faydalı olacaktır:

  • web programlama dilleri kullanılır;
  • bot aşırı yüklenmemiş, çok fazla kullanıcı yok;
  • sunucu değişmez, program uzun süre aynı sunucuda kalır.

Daha sonraki talimatlarda getUpdates'i kullanacağız.

@BotFather Telegram hizmeti, sohbet botları oluşturmak için tasarlanmıştır. Temel ayarlar da bu sistem üzerinden yapılıyor – BotFather açıklama yapmanıza, profil fotoğrafı koymanıza, destek araçları eklemenize yardımcı olacak. Kitaplıklar – Telegram botları için HTML istekleri seti – İnternette mevcuttur, birçoğu vardır. Örnek program oluşturulurken pyTelegramBotApi kullanılmıştır.

1. Adım: Döviz Kuru Taleplerinin Uygulanması

Öncelikle sorguları gerçekleştiren kodu yazmanız gerekir. PrivatBank API'sini yazarken kullanacağız, aşağıda bir bağlantı var: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Kodunuzda bu yöntemleri kullanmanız gerekir:

  • load_exchange – döviz kurlarını bulur ve kodlanmış bilgileri görüntüler;
  • get_exchange – belirli bir para birimiyle ilgili verileri görüntüler;
  • get_exchanges – örneğe göre para birimlerinin listesini gösterir.

Sonuç olarak, pb.py dosyasındaki kod şöyle görünür:

yeniden içe aktarma isteklerini içe aktarma json URL'sini içe aktarma = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): return json.loads(requests.get(URL).text) def get_exchange(ccy_key) ): exc için load_exchange(): if ccy_key == exc['ccy']: return exc return False def get_exchanges(ccy_pattern): sonuç = [] ccy_pattern = re.escape(ccy_pattern) + '.*' exc için load_exchange(): eğer re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) ise Yok: sonuç.append(hariç) sonuç döndürür

Program, belirtilen isteklere aşağıdaki yanıtı verebilir:

[ { ccy:"USD", base_ccy:"UAH", satın al:"25.90000", satış:"26.25000" }, { ccy:"EUR", base_ccy:"UAH", satın al:"29.10000", satış:"29.85000 " }, { ccy:"RUR", base_ccy:"UAH", satın al:"0.37800", satış:"0.41800" }, { ccy:"BTC", base_ccy:"USD", satın al:"11220.0384", satış: "12401.0950" } ]

2. Adım: @BotFather ile bir Telegram Botu oluşturun

@BotFather hizmetini kullanarak mesajları almak ve bunlara yanıt vermek için bir program oluşturabilirsiniz. Telegram sayfasına gidin ve /newbot komutunu girin. Sohbette, önce botun adını ve ardından adresini yazmanız gereken talimatlar görünecektir. Bot hesabı oluşturulduğunda, ekranda jeton içeren bir karşılama mesajı görünecektir. Daha fazla yapılandırma için şu komutları kullanın:

  • /setdescription – açıklama;
  • /setabouttext – yeni bot hakkında bilgi;
  • /setuserpic – profil fotoğrafı;
  • /setinline – satır içi mod;
  • /setcommands - komutların açıklaması.

Son yapılandırma adımında /help ve /exchange'i tanımlıyoruz. Tüm adımlar tamamlandığında, kodlamaya geçme zamanı.

3. Adım: Bot'u Kurma ve Başlatma

Bir config.py dosyası oluşturalım. İçinde, benzersiz bot kodunu ve programın bilgi bulacağı saat dilimini belirtmeniz gerekir.

TOKEN = '' # botunuzun simgesiyle değiştirinTIMEZONE = 'Avrupa/Kiev' TIMEZONE_COMMON_NAME = 'Kiev'

Ardından, önceden yazılmış pb.py, kitaplıklar ve diğer gerekli bileşenlerin içe aktarılmasıyla başka bir dosya oluşturuyoruz. Eksik kitaplıklar paket yönetim sisteminden (pip) yüklenir.

telebotimport içe aktar configimport pbimport datetimeimport pytzimport jsonimport izleme geri P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME

Bir bot oluşturmak için pyTelegramBotApi'nin içeriğini kullanalım. Alınan jetonu aşağıdaki kodu kullanarak göndeririz:

bot = telebot.TeleBot(config.TOKEN) bot.polling(none_stop=True)

none_stop parametresi, isteklerin sürekli olarak gönderilmesini sağlar. Parametrenin çalışması yöntem hatalarından etkilenmeyecektir.

Adım 4: /start Komut İşleyicisini yazın

Önceki tüm adımlar doğru bir şekilde yapılırsa, bot çalışmaya başlamıştır. Program, getUpdates yöntemini kullandığından düzenli olarak istekler üretir. None_stop öğesinin bulunduğu satırdan önce, /start komutunu işleyen bir kod parçasına ihtiyacımız var:

@bot.message_handler(commands=['start']) def start_command(message): bot.send_message( message.chat.id, 'Selamlar! Size döviz kurlarını gösterebilirim.n' + 'Döviz kurlarını öğrenmek için / tuşlarına basın exchange.n' + 'Yardım almak için /help'e basın.' )

RџСўРё komutlar=['başlat'] Doğru'ya eşit start_command çağrılır. Mesajın içeriği oraya gider. Ardından, gönderme işlevini uygulamanız gerekir._İleti belirli bir mesajla ilgili olarak.

Adım 5: Bir /help Komut İşleyicisi oluşturun

/help komutu bir düğme olarak uygulanabilir. Üzerine tıklayarak, kullanıcı geliştiricinin Telegram hesabına yönlendirilecektir. Düğmeye "Geliştiriciye sor" gibi bir ad verin. send_message yöntemi için kullanıcıyı bir bağlantıya yönlendiren answer_markup parametresini ayarlayın. Klavyeyi oluşturan parametreyi (InlineKeyboardMarkup) koda yazalım. Yalnızca bir düğmeye ihtiyacınız var (InlineKeyboardButton).

Son komut işleyici kodu şöyle görünür:

@bot.message_handler(commands=['help']) def help_command(message): klavye = telebot.types.InlineKeyboardMarkup() klavye.add( telebot.types.InlineKeyboardButton( 'Geliştiriciye sorun', url='ваша ссылка на) профиль' ) ) bot.send_message( message.chat.id, '1) Kullanılabilir para birimlerinin bir listesini almak için /exchange.n' + '2)'ye basın 3) İlgilendiğiniz para birimine tıklayın.n' + '4) Siz kaynak ve hedef para birimleri ile ilgili bilgileri içeren bir mesaj alacak, ' + 'alış ve satış kurları.n' + '5) Taleple ilgili güncel bilgileri almak için “Güncelle”ye tıklayın. ' + 'Bot ayrıca önceki ve mevcut döviz kurları arasındaki farkı da gösterecektir.n' + 'XNUMX) Bot satır içi desteği destekler. Tip @ herhangi bir sohbette ve para biriminin ilk harflerinde.', answer_markup=keyboard )

Telegram sohbetinde kod eylemi:

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

Adım 6: /exchange Komut İşleyicisini Ekleme

Bu adım, sohbette mevcut para birimlerinin sembollerini içeren düğmeleri görüntülemek için gereklidir. Seçeneklere sahip bir ekran klavyesi, hatalardan kaçınmanıza yardımcı olacaktır. PrivatBank, ruble, dolar ve euro hakkında bilgi sağlar. InlineKeyboardButton seçeneği şu şekilde çalışır:

  1. Kullanıcı, istenen atama ile düğmeye tıklar.
  2. getUpdates bir geri arama alır (CallbackQuery).
  3. Klavyeye basmanın nasıl yapılacağı bilinir – basılan düğme hakkında bilgi iletilir.

/exchange işleyici kodu:

@bot.message_handler(commands=['exchange']) def exchange_command(message): klavye = telebot.types.InlineKeyboardMarkup() klavye.row( telebot.types.InlineKeyboardButton('USD', callback_data='get-USD') ) klavye.row( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .id, 'Seçilen para birimine tıklayın:', answer_markup=klavye )

Telegram'daki kodun sonucu:

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

7. Adım: Yerleşik klavye düğmeleri için bir işleyici yazma

pyTelegramBot Api paketi @bot.callback_query_handler dekoratör işlevini içerir. Bu bileşen, geri aramayı bir işleve dönüştürmek için tasarlanmıştır - API, aramayı açar ve yeniden oluşturur. Bu şekilde yazılır:

@bot.callback_query_handler(func=lambda call: True) def iq_callback(sorgu): data = query.data if data.startswith('get-'): get_ex_callback(sorgu)

Ayrıca get_ex_callback yöntemini de yazalım:

def get_ex_callback(sorgu): bot.answer_callback_query(query.id) send_exchange_result(query.message, query.data[4:])

Başka bir yararlı yöntem daha var – answer_callback_query. Düğmeye basma ile sonucun ekranda gösterilmesi arasındaki yükün kaldırılmasına yardımcı olur. Send_exchange_query'ye bir miktar para birimi kodu ve Mesaj ileterek bir mesaj gönderebilirsiniz. Send_exchange_result yazalım:

def send_exchange_result(message, ex_code): bot.send_chat_action(message.chat.id, 'typing') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id, serialize_ex(ex), answer_markup=get_update_keyboard(ex) ), parse_mode='HTML' )

Chatbot bankadan talebin sonucunu alırken API, ziyaretçi “mesaj yazarak” yazısını görür. Gerçek bir kişi cevap veriyor gibi görünüyor. Ekranda böyle bir göstergeyi görüntülemek için giriş durum satırları eklemeniz gerekecektir. Daha sonra get_exchange'i kullanacağız - onun yardımıyla program para birimini (ruble, euro veya dolar) alacak. send_message ek yöntemler kullanır: serialize_ex, para birimini başka bir biçime dönüştürür ve get_update_keyboard, bilgileri güncelleyen ve para birimi piyasası verilerini diğer sohbetlere gönderen yazılım tuşlarını ayarlar.

get_update_keyboard için kod yazalım. İki düğmeden söz edilmelidir - t ve e, tip ve değişim anlamına gelir. Kullanıcının birkaç sohbet arasından seçim yapabilmesi için Share düğmesi için switch_inline_query öğesi gereklidir. Ziyaretçi, dolar, ruble veya euro'nun güncel döviz kurunu kime göndereceğini seçebilecek.

def get_update_keyboard(ex): klavye = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'Güncelleme', callback_data=json.dumps({ 't': 'u', 'e': { ') b': ex['buy'], 's': ex['satış'], 'c': eski['ccy'] } }).replace(' ', '') ), telebot.types.InlineKeyboardButton ('Paylaş', switch_inline_query=ex['ccy']) ) klavyeyi döndür

Bazen döviz kurunun kısa sürede ne kadar değiştiğini görmeniz gerekir. Kullanıcıların dersleri karşılaştırmalı olarak görebilmesi için Güncelle butonu için iki yöntem yazalım.

Döviz kurları arasındaki fark, diff parametresi aracılığıyla serileştiriciye iletilir.

Öngörülen yöntemler yalnızca veriler güncellendikten sonra çalışır, kursun ilk gösterimini etkilemez.

def serialize_ex(ex_json, fark=Yok): sonuç = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':nn' + 'Satın Al:' + ex_json['satın al'] if fark: sonuç += ' ' + serialize_exchange_diff(diff['buy_diff']) + 'n' + 'Sat:' + ex_json['indirim'] +' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' else: sonuç += 'nSatış: ' + ex_json['indirim'] + 'n' dönüş sonucu def serialize_exchange_diff(diff): sonuç = '' eğer diff > 0: sonuç = '(' + str(diff) + ' " src="https://sworg/images/core/emoji/2.3/svg/2197.svg">" src="https://sworg/images /core/emoji/72x72/2197.png">" src="https://sworg/images/core/emoji/72x72/2197.png">)' elif fark < 0: sonuç = '(' + str( fark)[1:] + ' " src="https://sworg/images/core/emoji/2.3/svg/2198.svg">" src="https://sworg/images/core/emoji/72x72 /2198.png">" src="https://sworg/images/core/emoji/72x72/2198.png">)' sonucu döndürür

Ziyaretçinin dolar kurunu bilmek istediğini hayal edin. Mesajda USD'yi seçerseniz şunlar olur:

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

8. Adım: Güncelleme Düğmesi İşleyicisini Uygulama

Update butonu ile işlemlerin işlenmesi için kod yazalım ve buna iq_callback_method kısmını ekleyelim. Program öğeleri get parametresiyle başladığında, get_ex_callback yazmalısınız. Diğer durumlarda, JSON'u ayrıştırır ve t anahtarını almaya çalışırız.

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query) else: deneyin: if json.loads(data)[ 't'] == 'u': edit_message_callback(sorgu) ValueError hariç: geçiş

Eğer t eşittir u ise edit_message_callback metodu için bir program yazmanız gerekecektir. Bu süreci adım adım inceleyelim:

  1. Döviz piyasasının durumu hakkında güncel bilgileri indirme (exchange_now = pb.get_exchange(data['c']).
  1. diff ile bir serileştirici aracılığıyla yeni bir mesaj yazma.
  2. İmza ekleme (get_edited_signature).

İlk mesaj değişmezse, edit_message_text yöntemini çağırın.

def edit_message_callback(sorgu): veri = json.loads(query.data)['e'] exchange_now = pb.get_exchange(data['c']) metin = serialize_ex( exchange_now, get_exchange_diff( get_ex_from_iq_data(data), exchange_now ) ) + 'n' + get_edited_signature() if query.message: bot.edit_message_text( text, query.message.chat.id, query.message.message_id, answer_markup=get_update_keyboard(exchange_now), parse_mode='HTML' ) elif query.inline_message_ : bot.edit_message_text( text, inline_message_id=query.inline_message_id, answer_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

JSON'u ayrıştırmak için get_ex_from_iq_data yöntemini yazalım:

def get_ex_from_iq_data(exc_json): dönüş { 'satın al': exc_json['b'], 'satış': exc_json['s'] }

Birkaç yönteme daha ihtiyacınız olacak: örneğin, para birimlerinin maliyetiyle ilgili eski ve yeni bilgileri okuyan ve farkı gösteren get_exchange_diff.

def get_exchange_diff(son, şimdi): return { 'sale_diff': float("%.6f" % (float(now['sale']) - float(last['satış']))), 'buy_diff': kayan nokta ("%.6f" % (float(now['satın al']) - float(son['satın al']))) }

Sonuncusu get_edited_signature, kursun en son güncellendiği zamanı gösterir.

def get_edited_signature(): dönüş '' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ') güncellendi'

Sonuç olarak, sabit bir döviz kuru ile bottan güncellenen mesaj şöyle görünür:

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

Kurs değiştiğinde, belirtilen parametreler nedeniyle değerler arasındaki farklar mesajda görüntülenir.

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

9. Adım: Gömülü Mod Uygulaması

Programdan herhangi bir sohbete hızlı bir şekilde bilgi göndermek için yerleşik mod gereklidir - artık bir katılımcı olarak sohbete bir bot eklemeniz gerekmez. Bir Telegram kullanıcısı, önünde @ işareti olan bir bot adı girdiğinde, giriş satırının üzerinde dönüştürme seçenekleri görünmelidir. Öğelerden birine tıklarsanız, bot, verilerin güncellenmesi ve gönderilmesi için sonuçlar ve düğmelerle konuşmaya bir mesaj gönderir. Gönderenin adı “yoluyla ".

InlineQuery, kitaplık aracılığıyla query_text öğesine iletilir. Kod, arama sonuçlarını bir veri dizisi ve inline_query_id öğesi olarak almak için answer_line işlevini kullanır. Botun istek üzerine birkaç para birimi bulması için get_exchanges kullanıyoruz.

@bot.inline_handler(func=lambda sorgusu: Doğru) def query_text(inline_query): bot.answer_inline_query( inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query)) )

Bu yöntemle InlineQueryResultArticle'dan nesneleri döndürmek için bir dizi veriyi get_iq_articles'a iletiriz.

def get_iq_articles(değişimler): sonuç = [] değiş tokuşlarda hariç: sonuç.append( telebot.types.InlineQueryResultArticle( id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputTextMessageContent ( serialize_ex(exc), parse_mode='HTML' ), answer_markup=get_update_keyboard(exc), description='Convert ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) dönüş sonucu

Şimdi @ yazarsan ve satırda bir boşluk varsa, ekranda arama sonuçları görünecektir - mevcut üç para birimine dönüştürme seçenekleri.

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

Kullanıcılar, istenen para birimini girerek sonuçları filtreleyebilir.

Listeden istenen para birimine tıkladıktan sonra sohbet, bot kullanıcılarının aldığı mesajın aynısını alır. Güncelle düğmesini de kullanabilirsiniz. Aşağıdaki resim, bot aracılığıyla gönderilen güncellenmiş mesajı göstermektedir:

Python'da telgraf botu. Sıfırdan döviz kurlarıyla bot yazmak için eksiksiz bir rehber

Sonuç

Artık Telegram için nasıl bot oluşturulacağını biliyorsunuz. Programınıza faydalı araçlar ekleyebilirsiniz: sonucu güncellemek ve diğer haberci kullanıcılarına göndermek için düğmeler ve botun işlevlerini onunla sohbet dışında kullanmanıza izin veren yerleşik bir mod. Bu talimata dayanarak, yalnızca döviz kurlarını gösterecek olanı değil, diğer işlevleri olan herhangi bir basit bot oluşturabilirsiniz. Telegram'da müşterilerle sohbet edecek ve ilgilenen kişilerin şirketle olan bağlantısını güçlendirecek otomatik bir asistan oluşturmak için kitaplıklar, API'ler ve kodlarla deney yapmaktan korkmayın.

1 Yorum

  1. Fantastik yayın

Yorum bırak