Spaces:
Running
Running
def handle_response(response): | |
if response.status_code == 200: | |
return response.json() | |
else: | |
return {"error": f"Failed to fetch data. Status code: {response.status_code}"} | |
def get_income_statement(ticker, period='annual', limit=5): | |
""" | |
Fetches the income statement for a given company (ticker) over a specified period and with a limit on the number of records returned. | |
Parameters: | |
----------- | |
ticker : str | |
The stock symbol or CIK (Central Index Key) for the company (e.g., 'AAPL' for Apple or '0000320193' for its CIK). | |
period : str, optional | |
The reporting period for the income statement. Allowable values are: | |
- 'annual' : Retrieves the annual income statement (default). | |
- 'quarter' : Retrieves the quarterly income statement. | |
limit : int, optional | |
Limits the number of records returned. The default value is 5. | |
Returns: | |
-------- | |
dict or list of dict | |
The income statement data, including fields like date, symbol, reported currency, filing date, etc. | |
Example: | |
-------- | |
get_income_statement('AAPL', period='annual', limit=5) | |
Response format: | |
---------------- | |
[ | |
{ | |
"date": "2022-09-24", | |
"symbol": "AAPL", | |
"reportedCurrency": "USD", | |
"cik": "0000320193", | |
"fillingDate": "2022-10-28", | |
"acceptedDate": "2022-10-27 18:01:14", | |
... | |
}, | |
... | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
"period": period, # Accepts 'annual' or 'quarter' | |
"limit": limit, # Limits the number of records returned | |
"apikey": os.environ['FMP_API_KEY'] # API Key for authentication | |
} | |
# Construct the full URL with query parameters | |
endpoint = f"{BASE_URL}/income-statement/{ticker}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def ticker_search(query, limit=10, exchange='NYSE'): | |
""" | |
Searches for ticker symbols and exchanges for both equity securities and exchange-traded funds (ETFs) | |
by searching with the company name or ticker symbol. | |
Parameters: | |
----------- | |
query : str | |
The name or ticker symbol to search for (e.g., 'AA' for Alcoa). | |
limit : int, optional | |
Limits the number of records returned. The default is 10. | |
exchange : str, optional | |
Specifies the exchange to filter results by. Allowable values include: | |
- 'NYSE' : New York Stock Exchange (default). | |
- 'NASDAQ' : NASDAQ Exchange. | |
- Other exchange codes supported by the API. | |
Returns: | |
-------- | |
dict or list of dict | |
The search results, including the symbol, name, currency, stock exchange, and exchange short name. | |
Example: | |
-------- | |
ticker_search('AA', limit=10, exchange='NASDAQ') | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "PRAA", | |
"name": "PRA Group, Inc.", | |
"currency": "USD", | |
"stockExchange": "NasdaqGS", | |
"exchangeShortName": "NASDAQ" | |
}, | |
{ | |
"symbol": "PAAS", | |
"name": "Pan American Silver Corp.", | |
"currency": "USD", | |
"stockExchange": "NasdaqGS", | |
"exchangeShortName": "NASDAQ" | |
}, | |
... | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
"limit": limit, | |
"exchange": exchange, | |
"apikey": os.environ['FMP_API_KEY'] | |
} | |
endpoint = f"{BASE_URL}/search?query={query}&{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def company_profile(symbol): | |
""" | |
Fetches a company's profile, including key stats such as price, market capitalization, beta, and other essential details. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol or CIK (Central Index Key) for the company (e.g., 'AAPL' for Apple). | |
Returns: | |
-------- | |
dict or list of dict | |
The company's profile data, including fields such as symbol, price, beta, market cap, industry, CEO, and description. | |
Example: | |
-------- | |
company_profile('AAPL') | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "AAPL", | |
"price": 145.30, | |
"beta": 1.25, | |
"volAvg": 98364732, | |
"mktCap": 2423446000000, | |
"lastDiv": 0.88, | |
"range": "122.25-157.33", | |
"changes": -2.00, | |
"companyName": "Apple Inc.", | |
"currency": "USD", | |
"cik": "0000320193", | |
"isin": "US0378331005", | |
"cusip": "037833100", | |
"exchange": "NasdaqGS", | |
"exchangeShortName": "NASDAQ", | |
"industry": "Consumer Electronics", | |
"website": "https://www.apple.com", | |
"description": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories worldwide." | |
} | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'] | |
} | |
endpoint = f"{BASE_URL}/profile/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def stock_grade(symbol, limit = 500): | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey':os.environ['FMP_API_KEY'], | |
'limit':limit | |
} | |
endpoint = f"{BASE_URL}/grade/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def current_market_cap(symbol): | |
""" | |
Fetches the current market capitalization of a given company based on its stock symbol. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol for the company (e.g., 'AAPL' for Apple). | |
Returns: | |
-------- | |
dict or list of dict | |
The market capitalization data, including fields such as symbol, date, and market cap. | |
Example: | |
-------- | |
current_market_cap('AAPL') | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "AAPL", | |
"date": "2023-03-02", | |
"marketCap": 2309048053309 | |
} | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'] | |
} | |
endpoint = f"{BASE_URL}/market-capitalization/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def historical_market_cap(symbol, from_date=None, to_date=None, limit=None): | |
""" | |
Fetches the historical market capitalization of a given company within a specified date range. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol for the company (e.g., 'AAPL' for Apple). | |
from_date : str, optional | |
The start date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-10-10'). | |
Default is None, which fetches data from the earliest available date. | |
to_date : str, optional | |
The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-12-10'). | |
Default is None, which fetches data up to the latest available date. | |
limit : int, optional | |
Limits the number of records returned. Default is None, which fetches all available records. | |
Returns: | |
-------- | |
dict or list of dict | |
The historical market cap data, including fields such as symbol, date, and market capitalization. | |
Example: | |
-------- | |
historical_market_cap('AAPL', from_date='2023-10-10', to_date='2023-12-10', limit=100) | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "AAPL", | |
"date": "2023-03-02", | |
"marketCap": 2313794623242 | |
} | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'], | |
'from': from_date, | |
'to': to_date, | |
'limit': limit | |
} | |
endpoint = f"{BASE_URL}/historical-market-capitalization/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def analyst_recommendations(symbol): | |
""" | |
Fetches the analyst recommendations for a given company based on its stock symbol. | |
This includes buy, hold, and sell ratings. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol for the company (e.g., 'AAPL' for Apple). | |
Returns: | |
-------- | |
dict or list of dict | |
The analyst recommendation data, including fields such as buy, hold, sell, and strong buy ratings. | |
Example: | |
-------- | |
analyst_recommendations('AAPL') | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "AAPL", | |
"date": "2023-08-01", | |
"analystRatingsBuy": 21, | |
"analystRatingsHold": 6, | |
"analystRatingsSell": 0, | |
"analystRatingsStrongSell": 0, | |
"analystRatingsStrongBuy": 11 | |
} | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'] | |
} | |
endpoint = f"{BASE_URL}/analyst-stock-recommendations/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def stock_peers(symbol): | |
""" | |
Fetches a list of companies that are considered peers of the given company. | |
These peers are companies that trade on the same exchange, are in the same sector, | |
and have a similar market capitalization. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol for the company (e.g., 'AAPL' for Apple). | |
Returns: | |
-------- | |
dict or list of dict | |
The peers data, including a list of peer company ticker symbols. | |
Example: | |
-------- | |
stock_peers('AAPL') | |
Response format: | |
---------------- | |
[ | |
{ | |
"symbol": "AAPL", | |
"peersList": [ | |
"LPL", | |
"SNEJF", | |
"PCRFY", | |
"SONO", | |
"VZIO", | |
... | |
] | |
} | |
] | |
""" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'], | |
'symbol': symbol | |
} | |
BASE_URL = "https://financialmodelingprep.com/api/v4" | |
endpoint = f"{BASE_URL}/stock_peers?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def earnings_historical_and_upcoming(symbol, limit=100): | |
""" | |
Fetches historical and upcoming earnings announcements for a given company. | |
The response includes the date, EPS (earnings per share), estimated EPS, revenue, and estimated revenue. | |
Parameters: | |
----------- | |
symbol : str | |
The stock ticker symbol for the company (e.g., 'AAPL' for Apple). | |
limit : int, optional | |
Limits the number of records returned. The default is 100. | |
Returns: | |
-------- | |
dict or list of dict | |
The earnings data, including fields such as date, EPS, estimated EPS, revenue, and estimated revenue. | |
Example: | |
-------- | |
earnings_historical_and_upcoming('AAPL', limit=100) | |
Response format: | |
---------------- | |
[ | |
{ | |
"date": "1998-10-14", | |
"symbol": "AAPL", | |
"eps": 0.0055, | |
"epsEstimated": 0.00393, | |
"time": "amc", | |
"revenue": 1556000000, | |
"revenueEstimated": 2450700000, | |
"updatedFromDate": "2023-12-04", | |
"fiscalDateEnding": "1998-09-25" | |
} | |
] | |
""" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'], | |
'limit': limit | |
} | |
endpoint = f"{BASE_URL}/historical/earning_calendar/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def intraday_stock_prices(timeframe, symbol, from_date=None, to_date=None, extended='false'): | |
""" | |
Fetches the historical intraday stock price for a given company over a specified timeframe. | |
Parameters: | |
----------- | |
timeframe : str | |
The time interval for the stock data. Allowable values are: | |
- '1min' : 1 minute interval | |
- '5min' : 5 minute interval | |
- '15min' : 15 minute interval | |
- '30min' : 30 minute interval | |
- '1hour' : 1 hour interval | |
- '4hour' : 4 hour interval | |
symbol : str | |
The stock symbol for which to retrieve the data (e.g., 'AAPL' for Apple). | |
from_date : str, optional | |
The start date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-08-10'). | |
Default is None, which fetches all available data up to the present. | |
to_date : str, optional | |
The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-09-10'). | |
Default is None, which fetches data from the beginning up to the current date. | |
extended : str, optional | |
Whether to fetch extended market data (pre-market and after-hours). | |
Allowable values: | |
- 'true' : Fetch extended market data | |
- 'false' : Fetch only regular market hours data (default). | |
Returns: | |
-------- | |
dict or list of dict | |
The historical intraday stock data, including open, high, low, close, and volume for each time interval. | |
Example: | |
-------- | |
intraday_stock_price('5min', 'AAPL', from_date='2023-08-10', to_date='2023-09-10', extended='false') | |
Response format: | |
---------------- | |
[ | |
{ | |
"date": "2023-03-02 16:00:00", | |
"open": 145.92, | |
"low": 145.72, | |
"high": 146.00, | |
"close": 145.79, | |
"volume": 1492644 | |
}, | |
... | |
] | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'], | |
'from': from_date, | |
'to': to_date, | |
'extended': extended | |
} | |
endpoint = f"{BASE_URL}/historical-chart/{timeframe}/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) | |
def daily_stock_prices(symbol, from_date=None, to_date=None, serietype='line'): | |
""" | |
Fetches the daily End-Of-Day (EOD) stock price for a given company over a specified date range. | |
Parameters: | |
----------- | |
symbol : str | |
The stock symbol for which to retrieve the data (e.g., 'AAPL' for Apple). | |
from_date : str, optional | |
The start date for the historical data in 'YYYY-MM-DD' format (e.g., '1990-10-10'). | |
Default is None, which fetches the earliest available data. | |
to_date : str, optional | |
The end date for the historical data in 'YYYY-MM-DD' format (e.g., '2023-10-10'). | |
Default is None, which fetches data up to the most recent date. | |
serietype : str, optional | |
The type of data series to return. Allowable values are: | |
- 'line' : Line chart data (default). | |
- 'other types' can be specified if supported by the API in the future. | |
Returns: | |
-------- | |
dict or list of dict | |
The daily stock data, including open, high, low, close, volume, adjusted close, etc. | |
Example: | |
-------- | |
daily_stock_price('AAPL', from_date='1990-10-10', to_date='2023-10-10', serietype='line') | |
Response format: | |
---------------- | |
{ | |
"symbol": "AAPL", | |
"historical": [ | |
{ | |
"date": "2023-10-06", | |
"open": 173.8, | |
"high": 176.61, | |
"low": 173.18, | |
"close": 176.53, | |
"adjClose": 176.53, | |
"volume": 21712747, | |
"unadjustedVolume": 21712747, | |
"change": 2.73, | |
"changePercent": 1.57077, | |
"vwap": 175.44, | |
"label": "October 06, 23", | |
"changeOverTime": 0.0157077 | |
}, | |
... | |
] | |
} | |
""" | |
BASE_URL = "https://financialmodelingprep.com/api/v3" | |
params = { | |
'apikey': os.environ['FMP_API_KEY'], | |
'from': from_date, | |
'to': to_date, | |
'serietype': serietype | |
} | |
endpoint = f"{BASE_URL}/historical-price-full/{symbol}?{urlencode(params)}" | |
response = requests.get(endpoint) | |
return handle_response(response) |