Konu Özeti

Python ile Telegram botu kullanarak istenen sitenin RSS beslemesinden haber başlıklarını ve URL'lerini otomatik çekip belirli bir kanala gönderen bir kod yapısı sunuluyor. Bot tokeni, hedef kanal adresi ve RSS URL'si girilerek çalıştırılıyor. Hata durumunda botlog.txt, paylaşılan linkleri tekrar göndermemek için JSON dosyası oluşturuluyor. Gerekli kütüphanelerin kurulması gerektiği belirtiliyor.

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Selam Dsotlar, pythonda istediğiniz sitenin haberlerini otomatik bir şekilde başlık,url olarak çekebilen bir kod yapısı yazdım umarım işinize yarar
yapmanız gerekenler:
Telgram botunuzun tokenini gerekli yere yapıştırmak
istediğiniz kanalın adresini "@ornekkanaladi" olarak girmeniz
son olarak istediğiniz sitenin rss URL adresini girmeniz.
Bot hata aldığı zmanlarda botlog.txt dosyası oluşturur ve paylaşılan linkleri bir daha atmaması adına bir json dosyası oluşturur bilginiz olsun. Kodda değişiklik yapıp kendinize göre uyarlarsınız iyi forumlar.

NOT: gerekli kütüphaneleri indirmeyi unutmayın gerekn yerde iletişim kurun yardımcı olurum.

import asyncio import feedparser import json from datetime import datetime from telegram import Bot BOT_TOKEN = "Bot_yoken" CHANNEL_USERNAME = "Kanal_Adı" RSS_URL = "URL_RSS" SENT_LINKS_FILE = "sent_links.json" ERROR_LOG_FILE = "error_log.txt" bot = Bot(token=BOT_TOKEN) bot_status = "Bot çalışıyor" def log_error(error_message): """Hataları log dosyasına yazar.""" with open(ERROR_LOG_FILE, "a") as file: timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") file.write(f"[{timestamp}] {error_message}\n") print(f"[{timestamp}] Hata loglandı: {error_message}") def load_sent_links(): """Daha önce gönderilen haber bağlantılarını dosyadan yükler.""" try: with open(SENT_LINKS_FILE, "r") as file: return json.load(file) except FileNotFoundError: return [] except json.JSONDecodeError: log_error("Gönderilen haber dosyası bozuk. Liste sıfırlandı.") return [] def save_sent_links(sent_links): """Gönderilen haber bağlantılarını dosyaya kaydeder.""" with open(SENT_LINKS_FILE, "w") as file: json.dump(sent_links, file) async def fetch_rss(): """RSS beslemesinden yeni haberleri alır.""" feed = feedparser.parse(RSS_URL) new_entries = [] for entry in feed.entries: if entry.link not in sent_links: new_entries.append((entry.title, entry.link)) sent_links.append(entry.link) save_sent_links(sent_links) return new_entries async def send_to_channel(entries): """Kanalda yeni haberleri paylaşır.""" for entry in entries: title, link = entry message = f"📰 *{title}*\n \n({link})" await bot.send_message(chat_id=CHANNEL_USERNAME, text=message, parse_mode="Markdown") async def main(): """Botun ana işleyiş döngüsü.""" global sent_links, bot_status sent_links = load_sent_links() error_logged = False while True: try: bot_status = "Bot çalışıyor" print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {bot_status}") new_entries = await fetch_rss() if new_entries: await send_to_channel(new_entries) await asyncio.sleep(30) except Exception as e: bot_status = "Bot hataya düştü" print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {bot_status}: {e}") if not error_logged: log_error(str(e)) error_logged = True await asyncio.sleep(60) finally: bot_status = "Bot çalışmıyor" print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {bot_status}") # Asenkron ana döngüyü çalıştır if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: print("Bot manuel olarak durduruldu.")

🔒 Bu içeriği görmek için giriş yapın

 
Son düzenleme:
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
135,050Konular
3,297,709Mesajlar
326,237Kullanıcılar
thekral21Son Üye
Üst Alt