From de70e3b4749abea757deb0d7d3cc287523d0555a Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Mon, 4 Jul 2022 20:01:51 +0200 Subject: [PATCH] Adding firebonk api --- crawler.py | 2 ++ firebonk_api.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ main.py | 13 ++++++++++--- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/crawler.py b/crawler.py index dabcc98..0f03af1 100644 --- a/crawler.py +++ b/crawler.py @@ -25,6 +25,8 @@ class Crawler: article_urls.append( 'https://www.ka-news.de/region/karlsruhe/falschparker-werden-in-karlsruhe-ab-juli-frueher-abgeschleppt-art-2813321') + article_urls.append( + 'https://www.ka-news.de/region/karlsruhe/musikalische-klaenge-in-der-karlsruher-innenstadt-karlsruhe-klingt-music-to-go-findet-zum-10-mal-statt-art-2813273') articles = [] diff --git a/firebonk_api.py b/firebonk_api.py index e69de29..c1e3382 100644 --- a/firebonk_api.py +++ b/firebonk_api.py @@ -0,0 +1,45 @@ +import logging +import requests + + +class FirebonkApi: + def __init__(self, api_url, user, password): + self.url = api_url + self.token = self.__auth_request__(user, password) + + def __auth_request__(self, user, password) -> str: + body = { + 'username': user, + 'password': password + } + + res = requests.post(self.url + '/auth/login', json=body) + + return res.json()['auth_token'] + + def create_post(self, title, summary, url, image_url): + headers = {'Authorization': 'Bearer {}'.format(self.token)} + + body = { + 'data': { + 'message': '# ' + title + '\n\n' + summary + '\n\n Link zum Artikel: ' + url, + 'content': { + 'metadata': { + 'visibility': 1, + 'archived': False, + 'pinned': False, + 'locked_comments': False + }, + 'topics': [ + { + 'name': 'ka-news' + } + ] + } + } + } + + res = requests.post(self.url + '/post/container/51', json=body, headers=headers) + + if res.status_code != 200: + logging.critical('Cannot create post! Message: %s', res.content) diff --git a/main.py b/main.py index 44f25e5..aa9c003 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,7 @@ import sql +import os from crawler import Crawler +from firebonk_api import FirebonkApi def __check_and_insert_in_database__(conn, article) -> bool: @@ -29,12 +31,17 @@ if __name__ == '__main__': crawl = Crawler('https://www.ka-news.de') conn = sql.get_connection() + user = os.environ.get('FIREBONK_USER') + pw = os.environ.get('FIREBONK_PASSWORD') + + api = FirebonkApi('https://www.firebonk.de/api/v1', user, pw) + + articles = crawl.check_for_new_yaa_articles() for article in articles: if not __check_and_insert_in_database__(conn, article): - print('New!') - else: - print('Old!') + # Post is new + api.create_post(article.title, article.summary, article.url, article.image_url) conn.close()