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')
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)
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)
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()
def __init__(self): self.db = MyTeleBotDB()
def __init__(self): self.bot = telebot.TeleBot(TOKEN) self.db = MyTeleBotDB() self.init_handlers()