Bot features #7

Merged
H4CK3R-01 merged 7 commits from bot-features into main 2022-03-17 15:29:16 +00:00
6 changed files with 73 additions and 55 deletions

View File

@ -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"

View File

@ -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,33 @@ 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'])
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):
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,12 +206,10 @@ 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'])
def send_news(message):
@ -205,7 +222,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

View File

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

View File

@ -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

View File

@ -7,26 +7,9 @@ __version__ = "0.0.2"
__license__ = "None"
import yfinance
import json
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):
def get_share_price(str_symbol):
""" get current share price for a certain symbol
:type str_symbol: string
@ -39,18 +22,6 @@ class Share_Handler:
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"]} {my_share_data["currency"]}'
my_return_string = f'{my_share_data["regularMarketPrice"]}'
return my_return_string
if __name__ == '__main__':
""" test object and get share price
:raises: none
:rtype: none
"""
new_handler = Share_Handler()
print(new_handler.get_share_price("TL0.DE"))

View File

@ -0,0 +1,16 @@
{
"user": "FloKell",
"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"
}
]
}