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.
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.")
Son düzenleme:
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl