Bu makalede, Python kullanarak basit bir Telegram botunun nasıl oluşturulacağını ve OpenWeatherMap API'si aracılığıyla hava durumu bilgisinin nasıl alınacağını adım adım açıklayacağım. Bu bot, kullanıcıdan bir şehir adı alarak o şehre ait hava durumu bilgilerini anlık olarak kullanıcıya sunar. Bot geliştirme sürecini, her kod parçasını detaylı bir şekilde açıklayacağım.
Projemizde iki temel kütüphaneye ihtiyaç duyuyoruz:
Bu satırda, TeleBot sınıfını kullanarak botumuzu başlatıyoruz. TOKEN değişkeni, botun Telegram API ile iletişimini sağlayan kimlik doğrulama bilgilerini içerir.
Bu fonksiyon, kullanıcıdan alınan şehir adı ile OpenWeatherMap API'sine bir istek gönderir ve cevap olarak hava durumu verilerini alır:
Bu fonksiyon, botu ilk kez kullanan bir kullanıcıya karşılama mesajı gönderir. Kullanıcı /start komutunu yazdığında, bot bu komutu algılar ve kullanıcının şehir ismini yazarak hava durumu sorgulaması yapabileceğini belirten bir mesaj gönderir.
Bu kısımda bot, kullanıcının gönderdiği tüm mesajları dinler ve şehir adı olarak kabul eder. Girilen şehir adı, hava durumu bilgisini çeken
Bu satır botun sürekli çalışmasını ve gelen mesajları dinlemesini sağlar. polling() metodu, botun aktif olarak mesajları kontrol etmesini ve işlemesini sağlar.
Sonuç
Bu makalede, Python kullanarak basit bir Telegram hava durumu botu oluşturduk. Bot, kullanıcıdan bir şehir ismi alarak OpenWeatherMap API'si üzerinden anlık hava durumu bilgilerini çekip kullanıcıya sunar.
KODUN TAMAMINI AŞAĞIDA BULABİLİRSİNİZ.
Gerekli Kütüphanelerin İçe Aktarılması
Python:
import telebot
import requests
Projemizde iki temel kütüphaneye ihtiyaç duyuyoruz:
- telebot: Telegram API ile bot oluşturmak için kullanılan Python kütüphanesidir.
- requests: HTTP istekleri yaparak dış veri kaynaklarından veri çekmek için kullanılır. Bu projede, OpenWeatherMap API'den hava durumu verilerini çekeceğiz.
API Anahtarlarının Tanımlanması
Python:
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
OWM_API_KEY = 'YOUR_OPENWEATHERMAP_API_KEY'
- TOKEN: Telegram botumuzun çalışması için gereken, Telegram tarafından verilen özgün kimlik doğrulama anahtarıdır.
- OWM_API_KEY: OpenWeatherMap API'sine erişebilmek için kullanacağımız anahtardır. Bu anahtar sayesinde API'den veri çekebiliriz.
Telegram Botunun Tanımlanması
Python:
bot = telebot.TeleBot(TOKEN)
Bu satırda, TeleBot sınıfını kullanarak botumuzu başlatıyoruz. TOKEN değişkeni, botun Telegram API ile iletişimini sağlayan kimlik doğrulama bilgilerini içerir.
Hava Durumu Bilgisini Çekme İşlevi
Python:
def get_weather(city_name):
base_url = "http://api.openweathermap.org/data/2.5/weather?"
complete_url = f"{base_url}q={city_name}&appid={OWM_API_KEY}&units=metric&lang=tr"
response = requests.get(complete_url)
if response.status_code == 200:
data = response.json()
main = data['main']
weather_desc = data['weather'][0]['description']
temp = main['temp']
humidity = main['humidity']
wind_speed = data['wind']['speed']
return (f"Hava durumu: {weather_desc}\n"
f"Sıcaklık: {temp}°C\n"
f"Nem: {humidity}%\n"
f"Rüzgar hızı: {wind_speed} m/s")
else:
return "Şehir bulunamadı, lütfen geçerli bir şehir adı girin."
Bu fonksiyon, kullanıcıdan alınan şehir adı ile OpenWeatherMap API'sine bir istek gönderir ve cevap olarak hava durumu verilerini alır:
- base_url: API'nin hava durumu verilerini sağladığı temel URL.
- complete_url: Kullanıcının girdiği şehir ismine, API anahtarına ve diğer parametrelere göre oluşturulan tam URL.
- response: API'ye yapılan isteğin cevabını içerir. Eğer status_code 200 (başarılı) ise, API'den gelen JSON verisini işler ve kullanıcının girdiği şehir hakkında hava durumu, sıcaklık, nem ve rüzgar hızı gibi bilgileri döndürür. Aksi takdirde, şehir bulunamadığına dair bir mesaj döner.
/start Komutunun Tanımlası/start Komutunun Tanımlanması
Python:
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Merhaba! Şehir ismini yazarak hava durumunu öğrenebilirsiniz.")
Bu fonksiyon, botu ilk kez kullanan bir kullanıcıya karşılama mesajı gönderir. Kullanıcı /start komutunu yazdığında, bot bu komutu algılar ve kullanıcının şehir ismini yazarak hava durumu sorgulaması yapabileceğini belirten bir mesaj gönderir.
Şehir Adına Göre Hava Durumu Bilgisinin Gönderilmesi
Python:
@bot.message_handler(func=lambda message: True)
def echo_all(message):
city_name = message.text
weather_info = get_weather(city_name)
bot.reply_to(message, weather_info)
Bu kısımda bot, kullanıcının gönderdiği tüm mesajları dinler ve şehir adı olarak kabul eder. Girilen şehir adı, hava durumu bilgisini çeken
get_weather() fonksiyonuna iletilir ve sonuç, kullanıcıya bot aracılığıyla cevap olarak gönderilir.Botun Çalıştırılması
Python:
bot.polling()
Bu satır botun sürekli çalışmasını ve gelen mesajları dinlemesini sağlar. polling() metodu, botun aktif olarak mesajları kontrol etmesini ve işlemesini sağlar.
Sonuç
Bu makalede, Python kullanarak basit bir Telegram hava durumu botu oluşturduk. Bot, kullanıcıdan bir şehir ismi alarak OpenWeatherMap API'si üzerinden anlık hava durumu bilgilerini çekip kullanıcıya sunar.
KODUN TAMAMINI AŞAĞIDA BULABİLİRSİNİZ.
Python:
import telebot
import requests
# Telegram bot token'ı ve OpenWeatherMap API anahtarı
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
OWM_API_KEY = 'YOUR_OPENWEATHERMAP_API_KEY'
bot = telebot.TeleBot(TOKEN)
# Hava durumu API'sine istek yapma işlevi
def get_weather(city_name):
base_url = "http://api.openweathermap.org/data/2.5/weather?"
complete_url = f"{base_url}q={city_name}&appid={OWM_API_KEY}&units=metric&lang=tr"
response = requests.get(complete_url)
if response.status_code == 200:
data = response.json()
main = data['main']
weather_desc = data['weather'][0]['description']
temp = main['temp']
humidity = main['humidity']
wind_speed = data['wind']['speed']
return (f"Hava durumu: {weather_desc}\n"
f"Sıcaklık: {temp}°C\n"
f"Nem: {humidity}%\n"
f"Rüzgar hızı: {wind_speed} m/s")
else:
return "Şehir bulunamadı, lütfen geçerli bir şehir adı girin."
# /start komutu için işlev
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Merhaba! Şehir ismini yazarak hava durumunu öğrenebilirsiniz.")
# Şehir adı girildiğinde hava durumu bilgisini gönderme
@bot.message_handler(func=lambda message: True)
def echo_all(message):
city_name = message.text
weather_info = get_weather(city_name)
bot.reply_to(message, weather_info)
# Botu çalıştır
bot.polling()