Files
OpenBB/discovery/fidelity_api.py
2021-03-03 21:30:24 +02:00

65 lines
2.8 KiB
Python

import argparse
import pandas as pd
import requests
from bs4 import BeautifulSoup
from helper_funcs import check_positive
# ---------------------------------------------------- ORDERS ----------------------------------------------------
def orders(l_args):
parser = argparse.ArgumentParser(prog='orders',
description='''Orders by Fidelity customers. Information shown in the table below
is based on the volume of orders entered on the "as of" date shown. Securities
identified are not recommended or endorsed by Fidelity and are displayed for
informational purposes only. [Source: Fidelity]''')
parser.add_argument('-n', "--num", action="store", dest="n_num", type=check_positive, default=10,
help='Number of top ordered stocks to be printed.')
try:
(ns_parser, l_unknown_args) = parser.parse_known_args(l_args)
if l_unknown_args:
print(f"The following args couldn't be interpreted: {l_unknown_args}")
url_orders = f"https://eresearch.fidelity.com/eresearch/gotoBL/fidelityTopOrders.jhtml"
text_soup_url_orders = BeautifulSoup(requests.get(url_orders).text, "lxml")
l_orders = list()
l_orders_vals = list()
idx = 0
for orders in text_soup_url_orders.findAll('td', {'class' : ['second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eight']}):
if ((idx+1)%3 == 0) or ((idx+1)%4 == 0) or ((idx+1)%6 == 0):
l_orders_vals.append(orders.contents[1])
elif ((idx+1)%5 == 0):
s_orders = str(orders)
l_orders_vals.append(s_orders[s_orders.find('title="') + len('title="'): s_orders.find('"/>')])
else:
l_orders_vals.append(orders.text.strip())
idx += 1
# Add value to dictionary
if (idx+1)%8 == 0:
l_orders.append(l_orders_vals)
l_orders_vals = list()
idx = 0
df_orders = pd.DataFrame(l_orders, columns = ['Symbol', 'Company', 'Price Change', '# Buy Orders',
'Buy / Sell Ratio', '# Sell Orders', 'Latest News'])
df_orders = df_orders[['Symbol', 'Buy / Sell Ratio', 'Price Change', 'Company', '# Buy Orders', '# Sell Orders', 'Latest News']]
print(text_soup_url_orders.findAll('span', {'class' : 'source'})[0].text.capitalize() + ':')
pd.set_option('display.max_colwidth', -1)
print(df_orders.head(n=ns_parser.n_num).iloc[:,:-1].to_string(index=False))
print("")
except SystemExit:
print("")
return