Files
OpenBB/openbb_platform/providers/nasdaq/openbb_nasdaq/utils/helpers.py
Danglewood 2e3d8ef6b2 [Feature] Refactor FMP (#7217)
* stash the work here

* finish the job

* also add most active

* fix tmx etf countries

* codespell

* fix reference path in codespell

* still didn't get the path right

* linter

* linter

* unused-argument

* fix polygon

* fix tiingo

* remove debug print

* fix nasdaq

* more lint

* didn't save that file

* fix bad url in error message

* some review items

---------

Co-authored-by: Theodore Aptekarev <aptekarev@gmail.com>
2025-10-06 23:34:19 +00:00

79 lines
2.4 KiB
Python

"""Nasdaq Helpers Module."""
from functools import lru_cache
def remove_html_tags(text: str):
"""Remove HTML tags from a string."""
# pylint: disable=import-outside-toplevel
import re
clean = re.compile("<.*?>")
return re.sub(clean, " ", text)
def get_random_agent() -> str:
"""Generate a random user agent for a request."""
# pylint: disable=import-outside-toplevel
from random_user_agent.user_agent import UserAgent
user_agent_rotator = UserAgent(limit=100)
user_agent = user_agent_rotator.get_random_user_agent()
return user_agent
def get_headers(accept_type: str = "json") -> dict:
"""Get the headers for the request."""
if accept_type not in ["json", "text"]:
raise ValueError("Invalid accept_type. Must be either 'json' or 'text'.")
return (
{
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip",
"Accept-Language": "en-CA,en-US;q=0.7,en;q=0.3",
"Host": "api.nasdaq.com",
"User-Agent": get_random_agent(),
"Connection": "keep-alive",
}
if accept_type == "text"
else {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip",
"Accept-Language": "en-CA,en-US;q=0.7,en;q=0.3",
"Host": "api.nasdaq.com",
"Origin": "https://www.nasdaq.com",
"Referer": "https://www.nasdaq.com/",
"User-Agent": get_random_agent(),
"Connection": "keep-alive",
}
)
def date_range(start_date, end_date):
"""Yield dates between start_date and end_date."""
# pylint: disable=import-outside-toplevel
from datetime import timedelta
for n in range(int((end_date - start_date).days) + 1):
yield start_date + timedelta(n)
@lru_cache(maxsize=1)
def get_nasdaq_directory() -> str:
"""Get the Nasdaq directory from the FTP site."""
# pylint: disable=import-outside-toplevel
from openbb_core.app.model.abstract.error import OpenBBError # noqa
from urllib.error import URLError
from urllib.request import urlopen
url = "ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqtraded.txt"
try:
with urlopen(url) as response: # noqa: S310
data = response.read().decode("utf-8")
except URLError as e:
raise OpenBBError(e) from e
return data