Hoşgeldin Misafir

Telegram Entegreli Arayüzlü HaberBot Projesi

CodesTormer

12 Ara 2024
99 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Herkese Selam , geliştirdiğim telegram entegrasyonlu haber bot projesi kodlarını paylaşıyorum kullanımı şöyledir açılan arayüzde token kısmına oluşturduğunuz ve kanalınıza eklediğniz bot tokenı girip kanal ekle kısmındada kanal isimlerinizi ekledikten sonra altta dakika cinsinden süre ayarını girip sol üst köeşedki başlat butonuna basınca haberler kanallarınızda paylaşılamya başlayacaktır istediğiniz kadar kanal ekleyebilirsiniz eşanlı paylaşım yapılır.


Python:
import asyncio
import threading
import requests
from bs4 import BeautifulSoup
from telegram import Bot
import customtkinter as ctk
from tkinter import messagebox

# Bot Ayarları
bot_token = None
channel_names = []
sent_news = set()
polling_task = None
polling_interval = 300  # Varsayılan: 5 dakika
URL = 'https://www.sondakika.com/guncel'


async def send_news(bot, interval, duration):
    start_time = asyncio.get_event_loop().time()
    while True:
        if asyncio.get_event_loop().time() - start_time >= duration:
            print("Belirtilen süre doldu, bot haber göndermeyi durduruyor.")
            break

        try:
            response = requests.get(URL)
            soup = BeautifulSoup(response.text, 'html.parser')
            news_list = soup.find('ul', class_='news-list')
            news_items = news_list.find_all('li')

            for item in reversed(news_items):
                title = item.find('span', class_='title').text.strip()
                link = "https://www.sondakika.com" + item.find('a')['href']

                if link not in sent_news:
                    sent_news.add(link)

                    news_response = requests.get(link)
                    news_soup = BeautifulSoup(news_response.text, 'html.parser')

                    news_title = news_soup.find('h1', class_='haber_baslik').text.strip()
                    news_summary = news_soup.find('h2', id='spot', class_='mt10 haber_ozet').text.strip()

                    news_image_tag = news_soup.find('div', class_='haberResim')
                    news_image_url = news_image_tag.find('img')['src'] if news_image_tag else None

                    hour_info = item.find('span', class_='hour data_calc')['title']
                    message = f"{news_title}\n\n{news_summary}\n\nSaat: {hour_info}"

                    # Tüm kanallara eşzamanlı haber gönderimi için görevler oluştur
                    tasks = []
                    for channel in channel_names:
                        if news_image_url:
                            tasks.append(bot.send_photo(chat_id=channel, photo=news_image_url, caption=message))
                        else:
                            tasks.append(bot.send_message(chat_id=channel, text=message))

                    await asyncio.gather(*tasks)

                    print(f"Haber gönderildi: {news_title}")
                    await asyncio.sleep(60)

        except Exception as e:
            print(f"Haber gönderim hatası: {e}")

        await asyncio.sleep(interval)


def start_bot():
    global bot_token, polling_task, polling_interval

    bot_token = token_entry.get().strip()
    interval = interval_entry.get().strip()

    if not bot_token:
        messagebox.showerror("Hata", "Lütfen bir bot token girin!")
        return

    if not channel_names:
        messagebox.showerror("Hata", "Lütfen en az bir kanal adı ekleyin!")
        return

    try:
        polling_interval = int(interval)
    except ValueError:
        messagebox.showerror("Hata", "Gönderim aralığı geçerli bir sayı olmalıdır!")
        return

    duration_minutes = int(duration_entry.get().strip())
    duration_seconds = duration_minutes * 60

    bot = Bot(token=bot_token)

    if polling_task:
        messagebox.showerror("Hata", "Bot zaten çalışıyor!")
        return

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    polling_task = loop.create_task(send_news(bot, polling_interval, duration_seconds))
    threading.Thread(target=loop.run_forever, daemon=True).start()
    messagebox.showinfo("Başarı", f"Bot başlatıldı! Haberler {duration_minutes} dakika boyunca gönderilecek.")


def stop_bot():
    global polling_task

    if polling_task:
        polling_task.cancel()
        polling_task = None
        messagebox.showinfo("Başarı", "Bot durduruldu!")
    else:
        messagebox.showerror("Hata", "Bot çalışmıyor!")


def add_channel():
    channel = channel_entry.get().strip()
    if channel and channel not in channel_names:
        channel_names.append(channel)
        channel_listbox.insert('end', channel)
        channel_entry.delete(0, 'end')
    else:
        messagebox.showerror("Hata", "Kanal adı geçersiz veya zaten ekli!")


def remove_channel():
    selected = channel_listbox.curselection()
    if selected:
        channel = channel_listbox.get(selected)
        channel_names.remove(channel)
        channel_listbox.delete(selected)
    else:
        messagebox.showerror("Hata", "Lütfen bir kanal seçin!")


# Modern Arayüz Ayarları
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

root = ctk.CTk()
root.title("Telegram Haber Botu")
root.geometry("800x600")

# Üst Panel
top_frame = ctk.CTkFrame(root)
top_frame.pack(fill="x", padx=10, pady=10)

start_button = ctk.CTkButton(top_frame, text="Başlat", command=start_bot)
start_button.pack(side="left", padx=5)

stop_button = ctk.CTkButton(top_frame, text="Durdur", command=stop_bot)
stop_button.pack(side="left", padx=5)

exit_button = ctk.CTkButton(top_frame, text="Çıkış", command=root.quit)
exit_button.pack(side="right", padx=5)

# Orta Panel
body_frame = ctk.CTkFrame(root)
body_frame.pack(fill="both", expand=True, padx=20, pady=10)

ctk.CTkLabel(body_frame, text="Bot Token:").pack(pady=5)
token_entry = ctk.CTkEntry(body_frame, width=300)
token_entry.pack(pady=5)

ctk.CTkLabel(body_frame, text="Kanal Adı:").pack(pady=5)
channel_entry = ctk.CTkEntry(body_frame, width=300)
channel_entry.pack(pady=5)
ctk.CTkButton(body_frame, text="Kanal Ekle", command=add_channel).pack(pady=5)

ctk.CTkLabel(body_frame, text="Eklenen Kanallar:").pack(pady=5)
channel_listbox = ctk.CTkTextbox(body_frame, height=150, width=300)
channel_listbox.pack(pady=5)

ctk.CTkButton(body_frame, text="Kanal Sil", command=remove_channel).pack(pady=5)

ctk.CTkLabel(body_frame, text="Haber Gönderim Süresi (dakika):").pack(pady=5)
duration_entry = ctk.CTkEntry(body_frame, width=100)
duration_entry.pack(pady=5)

ctk.CTkLabel(body_frame, text="Haber Gönderim Aralığı (saniye):").pack(pady=5)
interval_entry = ctk.CTkEntry(body_frame, width=100)
interval_entry.pack(pady=5)
interval_entry.insert(0, str(polling_interval))

root.mainloop()
 

seversen001

14 Eki 2023
330 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Herkese Selam , geliştirdiğim telegram entegrasyonlu haber bot projesi kodlarını paylaşıyorum kullanımı şöyledir açılan arayüzde token kısmına oluşturduğunuz ve kanalınıza eklediğniz bot tokenı girip kanal ekle kısmındada kanal isimlerinizi ekledikten sonra altta dakika cinsinden süre ayarını girip sol üst köeşedki başlat butonuna basınca haberler kanallarınızda paylaşılamya başlayacaktır istediğiniz kadar kanal ekleyebilirsiniz eşanlı paylaşım yapılır.


Python:
import asyncio
import threading
import requests
from bs4 import BeautifulSoup
from telegram import Bot
import customtkinter as ctk
from tkinter import messagebox

# Bot Ayarları
bot_token = None
channel_names = []
sent_news = set()
polling_task = None
polling_interval = 300  # Varsayılan: 5 dakika
URL = 'https://www.sondakika.com/guncel'


async def send_news(bot, interval, duration):
    start_time = asyncio.get_event_loop().time()
    while True:
        if asyncio.get_event_loop().time() - start_time >= duration:
            print("Belirtilen süre doldu, bot haber göndermeyi durduruyor.")
            break

        try:
            response = requests.get(URL)
            soup = BeautifulSoup(response.text, 'html.parser')
            news_list = soup.find('ul', class_='news-list')
            news_items = news_list.find_all('li')

            for item in reversed(news_items):
                title = item.find('span', class_='title').text.strip()
                link = "https://www.sondakika.com" + item.find('a')['href']

                if link not in sent_news:
                    sent_news.add(link)

                    news_response = requests.get(link)
                    news_soup = BeautifulSoup(news_response.text, 'html.parser')

                    news_title = news_soup.find('h1', class_='haber_baslik').text.strip()
                    news_summary = news_soup.find('h2', id='spot', class_='mt10 haber_ozet').text.strip()

                    news_image_tag = news_soup.find('div', class_='haberResim')
                    news_image_url = news_image_tag.find('img')['src'] if news_image_tag else None

                    hour_info = item.find('span', class_='hour data_calc')['title']
                    message = f"{news_title}\n\n{news_summary}\n\nSaat: {hour_info}"

                    # Tüm kanallara eşzamanlı haber gönderimi için görevler oluştur
                    tasks = []
                    for channel in channel_names:
                        if news_image_url:
                            tasks.append(bot.send_photo(chat_id=channel, photo=news_image_url, caption=message))
                        else:
                            tasks.append(bot.send_message(chat_id=channel, text=message))

                    await asyncio.gather(*tasks)

                    print(f"Haber gönderildi: {news_title}")
                    await asyncio.sleep(60)

        except Exception as e:
            print(f"Haber gönderim hatası: {e}")

        await asyncio.sleep(interval)


def start_bot():
    global bot_token, polling_task, polling_interval

    bot_token = token_entry.get().strip()
    interval = interval_entry.get().strip()

    if not bot_token:
        messagebox.showerror("Hata", "Lütfen bir bot token girin!")
        return

    if not channel_names:
        messagebox.showerror("Hata", "Lütfen en az bir kanal adı ekleyin!")
        return

    try:
        polling_interval = int(interval)
    except ValueError:
        messagebox.showerror("Hata", "Gönderim aralığı geçerli bir sayı olmalıdır!")
        return

    duration_minutes = int(duration_entry.get().strip())
    duration_seconds = duration_minutes * 60

    bot = Bot(token=bot_token)

    if polling_task:
        messagebox.showerror("Hata", "Bot zaten çalışıyor!")
        return

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    polling_task = loop.create_task(send_news(bot, polling_interval, duration_seconds))
    threading.Thread(target=loop.run_forever, daemon=True).start()
    messagebox.showinfo("Başarı", f"Bot başlatıldı! Haberler {duration_minutes} dakika boyunca gönderilecek.")


def stop_bot():
    global polling_task

    if polling_task:
        polling_task.cancel()
        polling_task = None
        messagebox.showinfo("Başarı", "Bot durduruldu!")
    else:
        messagebox.showerror("Hata", "Bot çalışmıyor!")


def add_channel():
    channel = channel_entry.get().strip()
    if channel and channel not in channel_names:
        channel_names.append(channel)
        channel_listbox.insert('end', channel)
        channel_entry.delete(0, 'end')
    else:
        messagebox.showerror("Hata", "Kanal adı geçersiz veya zaten ekli!")


def remove_channel():
    selected = channel_listbox.curselection()
    if selected:
        channel = channel_listbox.get(selected)
        channel_names.remove(channel)
        channel_listbox.delete(selected)
    else:
        messagebox.showerror("Hata", "Lütfen bir kanal seçin!")


# Modern Arayüz Ayarları
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

root = ctk.CTk()
root.title("Telegram Haber Botu")
root.geometry("800x600")

# Üst Panel
top_frame = ctk.CTkFrame(root)
top_frame.pack(fill="x", padx=10, pady=10)

start_button = ctk.CTkButton(top_frame, text="Başlat", command=start_bot)
start_button.pack(side="left", padx=5)

stop_button = ctk.CTkButton(top_frame, text="Durdur", command=stop_bot)
stop_button.pack(side="left", padx=5)

exit_button = ctk.CTkButton(top_frame, text="Çıkış", command=root.quit)
exit_button.pack(side="right", padx=5)

# Orta Panel
body_frame = ctk.CTkFrame(root)
body_frame.pack(fill="both", expand=True, padx=20, pady=10)

ctk.CTkLabel(body_frame, text="Bot Token:").pack(pady=5)
token_entry = ctk.CTkEntry(body_frame, width=300)
token_entry.pack(pady=5)

ctk.CTkLabel(body_frame, text="Kanal Adı:").pack(pady=5)
channel_entry = ctk.CTkEntry(body_frame, width=300)
channel_entry.pack(pady=5)
ctk.CTkButton(body_frame, text="Kanal Ekle", command=add_channel).pack(pady=5)

ctk.CTkLabel(body_frame, text="Eklenen Kanallar:").pack(pady=5)
channel_listbox = ctk.CTkTextbox(body_frame, height=150, width=300)
channel_listbox.pack(pady=5)

ctk.CTkButton(body_frame, text="Kanal Sil", command=remove_channel).pack(pady=5)

ctk.CTkLabel(body_frame, text="Haber Gönderim Süresi (dakika):").pack(pady=5)
duration_entry = ctk.CTkEntry(body_frame, width=100)
duration_entry.pack(pady=5)

ctk.CTkLabel(body_frame, text="Haber Gönderim Aralığı (saniye):").pack(pady=5)
interval_entry = ctk.CTkEntry(body_frame, width=100)
interval_entry.pack(pady=5)
interval_entry.insert(0, str(polling_interval))

root.mainloop()
Reis tam olarak sıfırdan anlatırmsn acaba bot token. Nerden alacagiz vs
 

CodesTormer

12 Ara 2024
99 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Reis tam olarak sıfırdan anlatırmsn acaba bot token. Nerden alacagiz vs
Şöyle telegramdan botfather a giderek bir bot oluşturucaksınız ve bu botun özel bir tokenı oluyor bot ile iletişim kuramk için o tokenı bu programdaki bot token kısmına giriceksiniz oluşturduğunuz botunuzu kanalınızada eklemeyi unutmayınız.