根据指定的季度和年份获取公司的财报收益数据。
earnings = get_earnings_transcript(quarter, self.ticker_symbol, year)
return earnings
get_earnings_transcript函数的详细解释:
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(2))
def get_earnings_transcript(quarter: str, ticker: str, year: int):
"""Get the earnings transcripts
Args:
quarter (str)
ticker (str)
year (int)
"""
response = requests.get(
f"https://discountingcashflows.com/api/transcript/{ticker}/{quarter}/{year}/",
auth=("user", "pass"),
)
resp_text = json.loads(response.text)
# speakers_list = extract_speakers(resp_text[0]["content"])
corrected_date = correct_date(resp_text[0]["year"], resp_text[0]["date"])
resp_text[0]["date"] = corrected_date
return resp_text[0]
该网站是一个显示现金流、财报等数据的网站
1. 函数装饰器@retry
- 作用:装饰器
@retry
表示在函数执行时,如果遇到指定的异常(默认为Exception
),会进行重试。 - 参数解释:
wait=wait_random_exponential(min=1, max=5)
:定义了重试时等待的时间间隔,采用随机指数增长等待时间,最小等待1秒,最大等待5秒。stop=stop_after_attempt(2)
:定义了重试的停止条件,即最多重试2次(包括初始尝试),超过则不再重试。
2. 从浏览器获取数据
-
作用:该函数用于通过 HTTP GET 请求获取指定公司、指定季度、指定年份的财报文本数据。
-
参数:
quarter
:字符串,表示季度,如 "Q1", "Q2" 等。ticker
:字符串,表示公司的股票代码或标识符。year
:整数,表示年份。
-
HTTP 请求:
- 使用
requests.get
发起 GET 请求,访问 URLf"https://discountingcashflows.com/api/transcript/{ticker}/{quarter}/{year}/"
auth=("user", "pass")
:使用基本认证,用户名为 "user",密码为 "pass"。
- 使用
-
响应处理:
response.text
:获取 HTTP 响应的文本内容。json.loads(response.text)
:将 JSON 格式的响应文本解析为 Python 字典或列表对象。
3.进行日期矫正并返回
- 日期校正:
correct_date(resp_text[0]["year"], resp_text[0]["date"])
:调用correct_date
函数对财报文本中的日期进行校正,确保日期的年份与参数中指定的年份一致。resp_text[0]["date"] = corrected_date
:将校正后的日期更新回财报文本数据中。
- 返回值:
- 函数返回校正后的财报文本数据的第一个条目(通常是字典类型),即包含了财报的详细信息,如年份、日期、内容等。
4.日期格式的规整该函数的主要功能是接收两个参数:yr
和 dt
,分别表示正确的年份和给定的日期时间。它会将给定的日期时间字符串解析为 datetime
对象,然后检查该对象的年份是否与正确的年份 yr
相符。如果不相符,则将 datetime
对象的年份替换为正确的年份 yr
,最后将修正后的日期时间格式化为字符串并返回。
def correct_date(yr, dt):
"""Some transcripts have incorrect date, correcting it
Args:
yr (int): actual
dt (datetime): given date
Returns:
datetime: corrected date
"""
dt = datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
if dt.year != yr:
dt = dt.replace(year=yr)
return dt.strftime("%Y-%m-%d %H:%M:%S")
该函数的主要功能是接收两个参数:yr
和 dt
,分别表示正确的年份和给定的日期时间。它会将给定的日期时间字符串解析为 datetime
对象,然后检查该对象的年份是否与正确的年份 yr
相符。如果不相符,则将 datetime
对象的年份替换为正确的年份 yr
,最后将修正后的日期时间格式化为字符串并返回。