• 26-09-2025, 11:18:57
    #1
    Merhaba;

    Belli kategoride yer alan haberleri telegramda yayınlamak istiyorum. Ücretsiz haber botu mevcut mu?

    Ayrıca bu tarz haberlerde abonelik şart mı? Yani yasal mı?
  • 26-09-2025, 11:22:26
    #2
    Banada lazım konuda kalalım.
  • 26-09-2025, 11:25:25
    #3
    Buyrun daha önce hazırlamıştım. İstediğiniz yapay zeka ile geliştirebilirsiniz.

    from abc import ABC, abstractmethod
    import feedparser
    from datetime import datetime
    import logging
    from typing import Dict, List, Optional
    import json
    import os
    
    class NewsSource(ABC):
        @abstractmethod
        def get_news(self, category: str) -> List[dict]:
            pass
    
        @abstractmethod
        def get_categories(self) -> List[str]:
            pass
    
    class BBCNews(NewsSource):
        def __init__(self):
            self.rss_feeds = {
                "world": "http://feeds.bbci.co.uk/news/world/rss.xml",
                "technology": "http://feeds.bbci.co.uk/news/technology/rss.xml",
                "business": "http://feeds.bbci.co.uk/news/business/rss.xml",
                "health": "http://feeds.bbci.co.uk/news/health/rss.xml",
                "science": "http://feeds.bbci.co.uk/news/science_and_environment/rss.xml",
                "sport": "http://feeds.bbci.co.uk/sport/rss.xml",
                "entertainment": "http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml",
            }
    
        def get_categories(self) -> List[str]:
            return list(self.rss_feeds.keys())
    
        def get_news(self, category: str = "world") -> List[dict]:
    
            if category not in self.rss_feeds:
                raise ValueError(f"Geçersiz kategori. Mevcut kategoriler: {', '.join(self.get_categories())}")
    
            feed = feedparser.parse(self.rss_feeds[category])
            return [
                {
                    'title': entry.title,
                    'summary': entry.summary,
                    'link': entry.link,
                    'published': datetime.strptime(entry.published, "%a, %d %b %Y %H:%M:%S %Z"),
                }
                for entry in feed.entries[:10]
            ]
    
    class NewsFormatter:
    
        @staticmethod
        def format_news(news: dict) -> str:
    
            formatted_date = news['published'].strftime("%Y-%m-%d %H:%M:%S")
            return (
                f"🕒 {formatted_date}\n"
                f"🔹 {news['title']}\n"
                f"   {news['summary']}\n"
                f"   🌍 Kaynak: {news['link']}\n"
                f"{'-' * 50}"
            )
    
    class NewsManager:
    
        def __init__(self, news_source: NewsSource):
            self.news_source = news_source
            self.formatter = NewsFormatter()
            self.logger = self._setup_logger()
    
        def _setup_logger(self) -> logging.Logger:
    
            logger = logging.getLogger('HaberBot')
            logger.setLevel(logging.INFO)
            
            if not logger.handlers:
                handler = logging.StreamHandler()
                formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
                handler.setFormatter(formatter)
                logger.addHandler(handler)
            
            return logger
    
        def display_news(self, category: str = "world"):
    
            try:
                self.logger.info(f"{category.upper()} kategorisi için haberler getiriliyor...")
                
                print(f"\n📢 BBC News - {category.upper()} Kategorisi 📢\n" + "=" * 50)
                
                news_list = self.news_source.get_news(category)
                for news in news_list:
                    print(self.formatter.format_news(news))
                    
            except Exception as e:
                self.logger.error(f"Haber alınırken hata oluştu: {str(e)}")
                print(f"❌ Hata: {str(e)}")
    
    class NewsBot:
    
        def __init__(self):
            self.news_manager = NewsManager(BBCNews())
            self.settings = self._load_settings()
    
        def _load_settings(self) -> dict:
    
            if os.path.exists('settings.json'):
                with open('settings.json', 'r', encoding='utf-8') as f:
                    return json.load(f)
            return {'default_category': 'world'}
    
        def run(self):
    
            print("🤖 HaberBot'a Hoş Geldiniz! 🤖")
            print("\nMevcut kategoriler:")
            categories = self.news_manager.news_source.get_categories()
            print(", ".join(categories))
    
            while True:
                category = input("\nHangi kategori? (çıkış için 'q'): ").strip().lower()
                
                if category == 'q':
                    print("\n👋 HaberBot'u kullandığınız için teşekkürler!")
                    break
                    
                if category in categories:
                    self.news_manager.display_news(category)
                else:
                    print("❌ Geçersiz kategori! Lütfen listeden bir kategori seçin.")
    
    def main():
        bot = NewsBot()
        bot.run()
    
    if __name__ == "__main__":
        main()
  • 26-09-2025, 11:28:26
    #4
    Hocam bizler acemiyiz.. Bunu yapınca rss ile çekecek ama botu bir yerde onlinemı tutmamız lazım
  • 26-09-2025, 11:36:19
    #5
    Foxi adlı üyeden alıntı: mesajı görüntüle
    Hocam bizler acemiyiz.. Bunu yapınca rss ile çekecek ama botu bir yerde onlinemı tutmamız lazım
    Galiba replit böyle bir hizmet veriyordu