Что нового

RSS фидер на Python с оправкой уведомлений в Телеграм

durov

Administrator
Команда форума
#1
По сути, это рабочий rss фидер на python, который получает фижы, складывает их в sqlite БД, проверяет наличие новых сообщений, все новые сообщения шлет в Telegram бота. Удобно, можно настроить отработку по крону, хороший вариант избавиться от лишнего ПО на компьютере и в телефоне. Я использую python3, для работы фидера нужно установить python3-feedparser, я использую Fedora, поэтому использую dnf:

dnf install python3-feedparser

Как регистрировать бота наверное Вы знаете, поэтому приведу здесь ссылку на , где интуитивно и понятно можно создать себе бота. После создания бота, будет отображен его токен, ID своего чата с ботом можно узнать используя ссылку -
Теперь эти данные (токен и чат id) можно использовать в скрипте

Создание RSS фидера на Python
Далее создаем файл с расширением .py указываем интерпритатор, подключаем необходимые компоненты:

Python:
#!/usr/bin/python3

import sqlite3
import requests
import feedparser
import os
Указываем ссылки на свои любимые фиды:

Python:
myfeeds = [
  'https://godno.cc/forums/-/index.rss',
  'https://dno.host/rss'
]
Создаем / Используем sqlite БД

Python:
scriptDir = os.path.dirname(os.path.realpath(__file__))
db_connection = sqlite3.connect(scriptDir + '/rss.sqlite')
db = db_connection.cursor()
db.execute('CREATE TABLE IF NOT EXISTS myrss (title TEXT, date TEXT)')
Пишем процедуры проверки наличия постов в БД:

Python:
def article_is_not_db(article_title, article_date):
    db.execute("SELECT * from myrss WHERE title=? AND date=?", (article_title, article_date))
    if not db.fetchall():
        return True
    else:
        return False
Добавления постов в БД:

Python:
def add_article_to_db(article_title, article_date):
    db.execute("INSERT INTO myrss VALUES (?,?)", (article_title, article_date))
    db_connection.commit()
Процедуру отправки сообщения Телеграм боту:

Python:
def bot_sendtext(bot_message):
    send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message
    requests.get(send_text)
Пишем процедуру получения фида, проверки его наличия в БД:

Python:
def read_article_feed(feed):
    feed = feedparser.parse(feed)
    for article in feed['entries']:
        if article_is_not_db(article['title'], article['published']):
            add_article_to_db(article['title'], article['published'])
            bot_sendtext('New feed found ' + article['title'] +',' + article['link'])
Проверяем каждый фид из списка:

Python:
def spin_feds():
    for x in myfeeds:
        read_article_feed(x)
Запускаем все это дело:

Python:
if __name__ == '__main__':
    spin_feds()
    db_connection.close()
 
Вверх