From 3b675cf7fc414ec7d538120af015ae7b6b7c3872 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 12:58:58 +0100 Subject: [PATCH 1/6] updated reqs and news sources --- telegram_bot/news/news_fetcher.py | 2 +- telegram_bot/requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index 784961d..5f00fbc 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -26,7 +26,7 @@ def get_top_news_by_keyword(keyword): Returns: JSON/dict: dict containing articles """ - top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn', language='en') + top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn,buzzfeed,fox', language='en') return top_headlines def format_article(article): diff --git a/telegram_bot/requirements.txt b/telegram_bot/requirements.txt index 417310c..4dcfe5c 100644 --- a/telegram_bot/requirements.txt +++ b/telegram_bot/requirements.txt @@ -3,3 +3,4 @@ Markdown~=3.3.6 yfinance~=0.1.70 newsapi-python~=0.2.6 python-dotenv~=0.19.2 +requests~=2.27.1 From 536bdf3bd6f147bb366cd0ee3166b04d6793a830 Mon Sep 17 00:00:00 2001 From: Rripped Date: Wed, 16 Mar 2022 13:32:26 +0100 Subject: [PATCH 2/6] added auto sources for news --- telegram_bot/bot.py | 2 +- telegram_bot/news/news_fetcher.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 4f1be7e..401894b 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -205,7 +205,7 @@ def send_news(message): :rtype: none """ - keyword = "business" + keyword = "bitcoin" user_id = int(message.from_user.id) #Get Information for user with this id diff --git a/telegram_bot/news/news_fetcher.py b/telegram_bot/news/news_fetcher.py index 5f00fbc..69c0807 100644 --- a/telegram_bot/news/news_fetcher.py +++ b/telegram_bot/news/news_fetcher.py @@ -9,6 +9,7 @@ __license__ = "None" import sys import os import json +import requests from newsapi import NewsApiClient from dotenv import load_dotenv @@ -16,7 +17,12 @@ from dotenv import load_dotenv load_dotenv() # Init -newsapi = NewsApiClient(api_key=os.getenv('NEWS_API_KEY')) +api_key = os.getenv('NEWS_API_KEY') +newsapi = NewsApiClient(api_key=api_key) +source_json = requests.get(f"https://newsapi.org/v2/top-headlines/sources?apiKey={api_key}&language=en").json() +sources = source_json["sources"] +str_sources = ",".join([source["id"] for source in sources]) + def get_top_news_by_keyword(keyword): """get top news to keyword @@ -26,7 +32,7 @@ def get_top_news_by_keyword(keyword): Returns: JSON/dict: dict containing articles """ - top_headlines = newsapi.get_top_headlines(q=keyword, sources='bbc-news,the-verge,cnn,buzzfeed,fox', language='en') + top_headlines = newsapi.get_top_headlines(q=keyword, sources=str_sources, language='en') return top_headlines def format_article(article): @@ -49,6 +55,6 @@ if __name__ == '__main__': print("fetching top news by keyword business...") - articles = get_top_news_by_keyword("business") + articles = get_top_news_by_keyword("bitcoin") formatted_article = format_article(articles["articles"][0]) print(formatted_article) \ No newline at end of file From e4423a76b7ceab32990b95035f4d7ef79e26b326 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 17:42:46 +0100 Subject: [PATCH 3/6] update function now getting share data from json and updating on all shares --- telegram_bot/api_handler.py | 7 ++++ telegram_bot/bot.py | 32 ++++++++++---- telegram_bot/shares/share_fetcher.py | 55 ++++++------------------- telegram_bot/shares/shares_example.json | 16 +++++++ 4 files changed, 59 insertions(+), 51 deletions(-) create mode 100644 telegram_bot/api_handler.py create mode 100644 telegram_bot/shares/shares_example.json diff --git a/telegram_bot/api_handler.py b/telegram_bot/api_handler.py new file mode 100644 index 0000000..69c4974 --- /dev/null +++ b/telegram_bot/api_handler.py @@ -0,0 +1,7 @@ +""" +script for communicating with webservice to get data from database +""" +__author__ = "Florian Kellermann, Linus Eickhoff" +__date__ = "16.03.2022" +__version__ = "0.0.1" +__license__ = "None" \ No newline at end of file diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 401894b..5705326 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -20,6 +20,7 @@ import telebot import time import sys import logging +import json import news.news_fetcher as news import shares.share_fetcher as share_fetcher @@ -30,7 +31,7 @@ from dotenv import load_dotenv load_dotenv() -bot_version = "0.1.1" +bot_version = "0.2.1" user_list = [] class User: # Currently saving users in this class to test functionality -> later database @@ -161,15 +162,30 @@ def send_update(message): """ user_id = int(message.from_user.id) - share_fetcher = share_fetcher.Share_Handler() + #Can be deleted when getting from database + dirname = os.path.dirname(__file__) + json_path = os.path.join(dirname, 'shares/shares_example.json') - #Get Information for user with this id - #call Share_Handler - bot.send_message(chat_id=user_id, text='This is your update') + with open(json_path) as json_file: + json_share_data = json.load(json_file) + int_share_count = int(json_share_data['share_count']) + + for i in range(int_share_count): + + my_share = json_share_data['shares'][i] + my_share_symbol = str(my_share['symbol']) + my_share_amount = float(my_share['amount_bought']) + my_share_buy_price = float(my_share['price_bought']) + my_share_course = float(share_fetcher.get_share_price(my_share_symbol)) + + + my_update_message = f'Symbol: {my_share_symbol}\nPrice: {my_share_course}\nBought for: {my_share_buy_price}\n\ +Amount owned: {my_share_amount}\nWin/Lose: {(my_share_amount*my_share_course) - (my_share_amount*my_share_buy_price)}' + bot.send_message(chat_id=user_id, text=my_update_message) @bot.message_handler(commands=['share']) -def send_update(message): +def send_share_update(message): """ Send price of a specific share :type message: message object bot @@ -187,10 +203,8 @@ def send_update(message): bot.register_next_step_handler(message, send_share_price) def send_share_price(message): - share_fetcher_obj = share_fetcher.Share_Handler() - str_share_price = share_fetcher_obj.get_share_price(str(message.text)) + str_share_price = share_fetcher.get_share_price(str(message.text)) bot.reply_to(message, str_share_price) - @bot.message_handler(commands=['news']) diff --git a/telegram_bot/shares/share_fetcher.py b/telegram_bot/shares/share_fetcher.py index f107519..1aa3376 100644 --- a/telegram_bot/shares/share_fetcher.py +++ b/telegram_bot/shares/share_fetcher.py @@ -7,50 +7,21 @@ __version__ = "0.0.2" __license__ = "None" import yfinance +import json +def get_share_price(str_symbol): + + """ get current share price for a certain symbol + :type str_symbol: string + :param str_symbol: share symbol to get price for -class Share_Handler: - def __init__(self): - return - - def all_share_prices_for_user(self, int_user_id): - - """ Get all share prices for a certain user with his id - :type int_user_id: integer - :param int_user_id: user_id to get all share prices for - - :raises: none - - :rtype: ###tbd### (maybe dictonary) - """ - return - - - def get_share_price(self, str_symbol): - - """ get current share price for a certain symbol - :type str_symbol: string - :param str_symbol: share symbol to get price for - - :raises: - - :rtype: - """ - - my_share_info = yfinance.Ticker(str_symbol) - my_share_data = my_share_info.info - my_return_string = f'{my_share_data["regularMarketPrice"]} {my_share_data["currency"]}' - return my_return_string - - + :raises: -if __name__ == '__main__': - - """ test object and get share price - :raises: none - - :rtype: none + :rtype: """ - new_handler = Share_Handler() - print(new_handler.get_share_price("TL0.DE")) \ No newline at end of file + my_share_info = yfinance.Ticker(str_symbol) + my_share_data = my_share_info.info + #my_return_string = f'{my_share_data["regularMarketPrice"]} {my_share_data["currency"]}' + my_return_string = f'{my_share_data["regularMarketPrice"]}' + return my_return_string \ No newline at end of file diff --git a/telegram_bot/shares/shares_example.json b/telegram_bot/shares/shares_example.json new file mode 100644 index 0000000..79e3273 --- /dev/null +++ b/telegram_bot/shares/shares_example.json @@ -0,0 +1,16 @@ +{ + "user": "NormalParameter", + "share_count": 2, + "shares": [ + { + "symbol": "APC.DE", + "price_bought": "50.06", + "amount_bought": "5.1" + }, + { + "symbol": "TL0.DE", + "price_bought": "450.06", + "amount_bought": "5.13" + } + ] +} \ No newline at end of file From 2961bbb4294b603c694edd0bf0ec74661641b833 Mon Sep 17 00:00:00 2001 From: Florian Kellermann Date: Wed, 16 Mar 2022 17:49:57 +0100 Subject: [PATCH 4/6] Welcome message for updates and change in json --- telegram_bot/bot.py | 3 +++ telegram_bot/shares/shares_example.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 5705326..e3e4f28 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -169,6 +169,9 @@ def send_update(message): with open(json_path) as json_file: json_share_data = json.load(json_file) int_share_count = int(json_share_data['share_count']) + str_username = str(json_share_data['user']) + bot.send_message(chat_id=user_id, text=f'Hello {str_username}. Here is the update on your currently owned shares:') + for i in range(int_share_count): diff --git a/telegram_bot/shares/shares_example.json b/telegram_bot/shares/shares_example.json index 79e3273..3b3b2fc 100644 --- a/telegram_bot/shares/shares_example.json +++ b/telegram_bot/shares/shares_example.json @@ -1,5 +1,5 @@ { - "user": "NormalParameter", + "user": "FloKell", "share_count": 2, "shares": [ { From 458ef32eebb5920db62b10f1e254dc4caffcbe5e Mon Sep 17 00:00:00 2001 From: NormalParameter Date: Thu, 17 Mar 2022 14:07:45 +0100 Subject: [PATCH 5/6] Update for merge --- telegram_bot/bot.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 1480837..26ff3e4 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -21,13 +21,8 @@ import time import sys import logging -<<<<<<< HEAD -import news_fetcher -import share_fetcher -======= import news.news_fetcher as news import share_fetcher ->>>>>>> 725f9806b7109b68219cc273edc616c1059ee4bb from telebot import types from dotenv import load_dotenv From c452d23b473c6128c1ec6fe475f6a1629ac3f684 Mon Sep 17 00:00:00 2001 From: NormalParameter Date: Thu, 17 Mar 2022 14:09:35 +0100 Subject: [PATCH 6/6] github spinnt --- telegram_bot/bot.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/telegram_bot/bot.py b/telegram_bot/bot.py index 95692e2..e3e4f28 100644 --- a/telegram_bot/bot.py +++ b/telegram_bot/bot.py @@ -23,11 +23,7 @@ import logging import json import news.news_fetcher as news -<<<<<<< HEAD -import share_fetcher -======= import shares.share_fetcher as share_fetcher ->>>>>>> 2961bbb4294b603c694edd0bf0ec74661641b833 from telebot import types from dotenv import load_dotenv