Создать Slackbot на удивление легко, и я хотел, чтобы он отправлял RSS-каналы в специальную комнату. Это, как я обнаружил, было немного сложно. Вот почему я хотел поделиться некоторыми из моих работ здесь.

Первый трюк — получить свой Slack API key. Это найдено здесь и требует, чтобы вы создали пользователя бота, а затем взяли ключ. Это довольно длинная строка, начинающаяся с xoxp.

Инструкции по генерации ключей API здесь.

Получив токен, просто поместите его в код ниже, где написано «ВАШ API ТОКЕН». Затем вы можете выбрать канал для уведомления.

channel="#newsroom"
simple_feed("litrelease.txt", "https://www.sec.gov/rss/litigation/litreleases.xml"',channel,'SEC Litigation")

Я сделал эту систему максимально простой, и все необходимые данные хранятся в текстовых файлах. Это можно было бы значительно улучшить, но пока это работает. Я также пытался управлять различными типами RSS-каналов, но некоторые из них очень беспорядочны, поэтому я создал несколько небольших процедур обнаружения ошибок, чтобы все двигалось.

Опять же, это очень рудиментарная система, которая отправляет новые новости на выбранный канал. Код ниже и напишите нам по адресу [email protected], если у вас есть какие-либо вопросы.

из googletrans import Translator
import feedparser

from dateutil import parser
import dateparser
import slack
from datetime import datetime
import pytz
from html.parser import HTMLParser

def strip_html(text):
parts = []
parser = HTMLParser()
parser.handle_data = parts.append
parser.feed(text)
return ' '.join(части)

def quick_slack(канал, текст):
token=”ВАШ API ТОКЕН”
log(текст)
slacker = slack.WebClient(токен)
slacker.chat_postMessage(channel=канал , текст=текст)

def get_simple_feed(date_file,feed, channel,heading):
d = feedparser.parse(feed)
i=0
max=20

попробуйте:
this_file=open(date_file, ‘r’)
Stored_update = this_file.readline()
за исключением:
Stored_update=""

try:
last_update = d.updated
exclude:
try:
last_update = d.entries[0].published
except:
last_update = d .entries[0].updated

если (сохраненное_обновление==””):
сохраненное_обновление = последнее_обновление

log(stored_update +” “+last_update)
if (stored_update != last_update ):
для сообщения в d.entries:
i = i + 1

try:
pubbed = dateparser.parse(post.published, settings={'TIMEZONE': 'US/Eastern'})
exclude:
pubbed = dateparser.parse(post.updated, settings={'TIMEZONE': 'США/Восток'})

update = dateparser.parse(last_update, settings={‘TIMEZONE’: ‘US/Eastern’})

if (опубликованное › обновление):
single_line = ""
single_line = ""+ post.title + ":" + post.link + "\n"
quick_slack(channel, "Новости из " + заголовок + ":star::star::star:")
попробуйте:
single_line=single_line+"\n"+strip_tags(post.description)
кроме:
> одиночная_линия=одиночная_линия+”\n “

quick_slack (канал, одиночная_линия)

если я == макс:
перерыв

this_file = open(date_file, «w»)
this_file.write(last_update)
this_file.close()

# получить и доставить новости
print("Выполняется...")
print(datetime.now())
channel="#newsroom"
simple_feed("litrelease.txt" "https://www.sec.gov/rss/litigation/litreleases.xml,channel,SEC Litigation")
simple_feed("lastftc.txt", "https://www.cftc.gov/RSS" /RSSGP/rssgp.xml,channel, «CFTC General»)
simple_feed(«googlebtc.txt», «https://news.google.com/rss/search?q=bitcoin,channel,Google Bitcoin» )

Фото Roman Kraft на Unsplash