Example #1
0
class MyTeleBotRSS:
    def __init__(self):
        self.db = MyTeleBotDB()

    def process(self, channel, entries):
        """Обработка новостей и отправка их в бд.
        Принимает:
        channel - веб-адрес канала rss,
        entries - список новостей
        """
        last_published = self.db.get_last_published(channel)
        news_count = 0
        for entry in entries:
            news = {}
            published = time.mktime(entry.published_parsed)
            if published > last_published:
                news['title'] = entry['title']
                news['link'] = entry['link']
                news['published'] = published
                news['summary'] = entry['summary']
                news['base'] = channel
                try:
                    self.db.set_news(news)
                    news_count += 1
                except Exception as err:
                    logger.exception('Error: %s in db.set_news', err)
            else:
                break
        logger.info('Добавленно %d новостей из %s', news_count, channel)

    def run(self, channels):
        """Метод обработки каналов rss.
        Принимает:
        channels - список веб-адресов каналов rss.
        """
        logger.info('MyTeleBotRSS client started')
        for channel in RSS_CHANNELS:
            rss = feedparser.parse(channel)
            if rss.bozo:
                logger.warning('rss error for %s, bozo_exception: %s', channel,
                               rss.bozo_exception)
                continue
            self.process(channel, rss.entries)

    def close(self):
        """ Закрытие клиента """
        self.db.close()
        logger.info('MyTeleBotRSS client is closed')
Example #2
0
class MyTeleBot:
    def __init__(self):
        self.bot = telebot.TeleBot(TOKEN)
        self.db = MyTeleBotDB()
        self.init_handlers()

    def init_handlers(self):
        ''' Инициализация обработчиков событий telegram '''
        @self.bot.message_handler(commands=['start', 'help'])
        def command_help(message):
            self.bot.send_message(message.chat.id, constants.GREET)

        @self.bot.message_handler(content_types=['text'])
        def handle_message(message):
            self.bot.send_message(message.chat.id,
                                  self.format_news(),
                                  parse_mode='HTML')

    def format_news(self):
        news = self.db.get_news()
        if len(news) == 0:
            return (constants.BASE_EMPTY)
        return '\n\n'.join([constants.TEMPLATE.format(**n) for n in news])

    def run(self):

        self.bot.polling(none_stop=True, interval=0)
Example #3
0
class MyTeleBot:
    def __init__(self):
        self.bot = telebot.TeleBot(TOKEN)
        self.db = MyTeleBotDB()
        self.init_handlers()

    def init_handlers(self):
        """
        Инициализация обработчиков событий telegram
        """
        @self.bot.message_handler(commands=['start', 'help'])
        def command_help(message):
            self.bot.send_message(message.chat.id, constants.GREET)

        @self.bot.message_handler(content_types=['text'])
        def handle_message(message):
            self.bot.send_message(message.chat.id,
                                  self.format_news(message.text),
                                  parse_mode='HTML',
                                  disable_web_page_preview=1)

    def format_news(self, key=''):
        if key == '*':
            news = self.db.get_news()
        else:
            news = self.db.get_news(key=key)
        if len(news) == 0:
            return (constants.BASE_EMPTY)
        answer = '\n\n'
        for i in news:
            date = datetime.utcfromtimestamp(
                i['published']).strftime("%Y-%m-%d %H:%M:%S")
            payload = constants.TEMPLATE.format(**i)
            answer = '{} {} {} {} \n\n'.format(
                answer, emojize(":arrow_right:", use_aliases=True), str(date),
                payload)

        return answer

    def run(self):
        self.bot.polling(none_stop=True, interval=0)
Example #4
0
def main_cycle():
    news_queue = queue.Queue()
    feeds_queue = queue.Queue()
    rss_source = Rss_source(RSS_CHANNELS)
    db = MyTeleBotDB()

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    tasks = [
        asyncio.Task(get_data2(channel, feeds_queue))
        for channel in rss_source.channels.values()
    ]
    tasks.append(read_feed(feeds_queue, news_queue, rss_source))
    tasks.append(send_to_db(db, news_queue, rss_source))

    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()
Example #5
0
 def __init__(self):
     self.db = MyTeleBotDB()
Example #6
0
 def __init__(self):
     self.bot = telebot.TeleBot(TOKEN)
     self.db = MyTeleBotDB()
     self.init_handlers()