2.63636363636361111111111Rating 2.64 (11 Votes)

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

dnf install python3-feedparser

Как регистрировать бота наверное Вы знаете, поэтому приведу здесь ссылку на BotFather, где интуитивно и понятно можно создать себе бота. После создания бота, будет отображен его токен, ID своего чата с ботом можно узнать используя ссылку - https://api.telegram.org/bot$TOKEN/getUpdates или использовать Телеграм бота для распознавания своего ID - https://t.me/Get_Telegram_ID_bot

Теперь эти данные (токен и чат id) можно использовать в скрипте

Создание RSS фидера на Python

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

#!/usr/bin/python3

import sqlite3
import requests
import feedparser
import os

Указываем ссылки на свои любимые фиды:

myfeeds = [
  'https://sys-adm.in/?format=feed&type=rss',
  'https://forum.sys-adm.in/index.php?action=.xml;type=rss'
]

Создаем / Используем sqlite БД

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)')

Пишем процедуры проверки наличия постов в БД:

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

Добавления постов в БД:

def add_article_to_db(article_title, article_date):
    db.execute("INSERT INTO myrss VALUES (?,?)", (article_title, article_date))
    db_connection.commit()

Процедуру отправки сообщения Телеграм боту:

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)

Пишем процедуру получения фида, проверки его наличия в БД:

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'])

Проверяем каждый фид из списка:

def spin_feds():
    for x in myfeeds:
        read_article_feed(x)

Запускаем все это дело:

if __name__ == '__main__':
    spin_feds()
    db_connection.close()

Задаем разрешение на исполнение:

chmod +x ./rss.py

Пробуем. Если все работает можно закинуть скрипт в crontab:

cp rss.py /etc/cron.hourly/

Или просто добавить его в cron (например с интервалом запуска 5 минут):

*/5 * * * * /path/to/rss.py

Готовый бот в моей репе на GitHub. Done! 

Добавить комментарий


Защитный код
Обновить

Сейчас 383 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз