Telegram: Hava Uyarı Botu 1.Bölüm
Teknoloji alanındaki yetenek açığını kapatmak, yazılım alanında gençlerin geleceklerine değer katmak için 3 yıl önce yolculuğumuza başladık. Yüzlerce gencin katılımıyla büyürken, onların ürettiklerinden ve projelerinden ilham aldık. #KodluyoruzLab ile Kodluyoruz Akademi Mezunlar Kulübü’nden gençler yolculuğumuz boyunca ürettiklerini daha fazla gence ilham olmak için paylaşıyor. Şimdi gençleri dinleme zamanı…
2019 İstanbul “Python” bootcamp katılımcımız Deniz Özoğul tarafından hazırlanan “Telegram Hava Uyarı Botu” başlıklı yazının ilk bölümü sizlerle. Keyifli okumalar.
Bugün sizlerle birlikte, Development’tan Production’a kadar, bütün aşamaları tek tek inceleyeceğimiz bir uygulama yapacağız. Süreci nasıl yönettiğimi, hangi yolları izlediğimi sizlere göstermeye çalışarak ilerleyeceğim. Bu uygulamayı, Telegram Bot’u destekleyen her dilde yazabilirsiniz. Ben şahsen, projeyi hızlı bir şekilde ayağa kaldırabildiğinden Node.js’i tercih ediyorum.
Hedef: Bugünkü hava durumuyla ilgili bizlere bilgilendirme yapan basit bir Node.js Telegram Bot’u.
1. API Bulma ve Postman Kullanımı
Bu adım için Google’a girerek “github free api” yazıyoruz. Sonuçlar içerisinde karşımıza çıkan ilgili Github Repository’sini açıyoruz:
İlgili Repository’nin “README.md” dosyasında, -şu an için- en alt sırada bulunan “Weather” bölümüne ulaşıyoruz. Burada, MetaWeather’ı seçerek ilerleyebiliriz.
Daha sonra Postman’e uygulaması ile ilk API isteğimizi gerçekleştiriyoruz. Bu işlem sonrasında, aşağıdaki gibi bir sonuç elde edebiliriz. Bu isteği, WOEID (Where On Earth ID) alabilmek için yaptık. Sizler de istediğiniz bir şehre göre sorgu göndererek ilgili şehre ait WOEID bilgisini öğrenebilirsiniz.
WOEID’sini bulduğumuz şehrin hava durumu bilgilerine ulaşmak için ise aşağıdaki API Endpoint’ine istek gönderebiliriz.
https://www.metaweather.com/api/location/{{WOEID}} // 2344116 => Istanbul
Bu istek sonucunda şöyle bir JSON verisi elde edebilir ve bu veri sayesinde, 6 günlük bir hava raporu ve ilave bilgilere ulaşabiliriz.
İlgili JSON’da “consolidated_weather” (birleştirilmiş hava durumu) dizisinin ilk elemanı; o anki gün bilgisini, diğerleri ise devamındaki 5 günlük hava tahminlerini içeriyor. Bizler için önemli olan içinde bulunulan gün olduğundan, dizinin ilk indisini alacağız. JSON verisindeki “weather_state_abbr ” (hava durumu kısaltmaları) kullanarak havanın durumu anlayabiliriz.
Son olarak Postman’de yaptığımız son isteğe geri dönüyoruz. “SEND” tuşunun altındaki “Code” sekmesinden “Node.js>; Request” seçerek ilgili hazır kod bloğunu not defterine kaydedebiliriz.
2. Bot Kurma
Bu işlem için Telegram uygulamasına girerek BotFather ile bir konuşma başlatabiliriz. Yeni bir Bot oluşturmak için “/newbot” mesajını gönderebiliriz. Bizlerden bir İsim ve Takma İsim isteyecektir. Bu adım için örnek olarak “havakurtarici” ve “havakurtaricibot” koyabiliriz. Akabinde bizlere bir Token verecektir. Bu Token ile ilgili Bot’umuzu kontrol edebiliriz. Artık Bot’umuz da hazır olduğundan kodlamaya geçebiliriz.
3. Kodlama
İstediğimiz bir dizinde bir terminal açarak;
// Klasör oluşturmak
mkdir telegram-havakurtarici
// Klasör dizinine girmek
cd telegram-havakurtarici
// Proje bilgilerini oluşturmak
npm init -y
// Gerekli paketleri indirmek
npm install node-telegram-bot-api,request
// İlgili dizini VS Code ile açmak (yüklüyse)
code .
VS Code açıldığında “index.js” adında bir dosya oluşturuyoruz.
Örnek olarak yaptığım uygulamanın “index.js” dosyasına, açıklamalarıyla birlikte Github’tan erişebilirsiniz.
“index.js”
4. Sonuç
Sonuç olarak, mesajlarını tamamen kişiselleştirebileceğimiz, şirin bir Telegram Hava Uyarı Bot’u yapmış bulunmaktayız. Dilerseniz buradan ilgili Bot’a ulaşabilirsiniz.
Yazımızın 2. Bölümünde, bu işlemleri zaman ayarlı yapacak ve Bot’umuzun, kullanıcının belirlediği zamanlarda otomatik olarak mesaj atılmasını sağlayacağız.
Şimdilik hoşça kalın!
Bu yayın Avrupa Birliği’nin yardımıyla hazırlanmıştır. Bu yayının içeriğinden yalnızca Kodluyoruz Derneği sorumlu olup, herhangi bir şekilde AB’nin, Türkiye Cumhuriyeti’nin ve Dışişleri Bakanlığı AB Başkanlığının görüşlerini yansıttığı şeklinde yorumlanamaz.