Files
OpenBB/discovery/fidelity_api.py
2021-02-20 08:57:18 +00:00

63 lines
2.8 KiB
Python

import argparse
from bs4 import BeautifulSoup
import requests
import pandas as pd
import re
from helper_funcs import *
# ---------------------------------------------------- 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