Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP Error 401: Unauthorized - symbol "TLT" not found or invalid periods #230

Open
zacra opened this issue Sep 7, 2024 · 9 comments
Open

Comments

@zacra
Copy link

zacra commented Sep 7, 2024

HTTP Error 401: Unauthorized - symbol "TLT" not found or invalid periods

내부적으로 미국 티커에 해당하는 일봉정보를 어디서 가져오는지 모르겠지만
티커명이 잘못 되었을리는 없고 기간정보가 유효하지 않은 것 같습니다. SPY등 다른 미국 티커를 넣어도 마찬가지입니다.

최근 yfinance가 3y란 기간이 있었는데 유효하지 않게 처리하는 등의 버전업이 있어서
기존 코드가 작동안하는 경우가 생겨서 max 등으로 처리해서 해결했는데

FinanceDataReader도 체크 및 업데이트 부탁드려요!

@QuantKang
Copy link

미국 종목의 경우 Yahoo Finance에서 가져오는 것으로 알고 있습니다.

저도 같은 에러가 발생하네요.

@jidon333
Copy link

jidon333 commented Sep 7, 2024

같은 이슈 발생합니다. 금요일까지는 잘 사용했는데 오늘부터 그러네요

@QuantKang
Copy link

전 일단 해외 종목은 yfinance로 바꿔서 사용하고 있습니다.

@mienne
Copy link

mienne commented Sep 8, 2024

동일 이슈 발생하고 있네요😭

@nuri428
Copy link

nuri428 commented Sep 8, 2024

동일 이슈 발생하고 있네요.

@yiugn
Copy link

yiugn commented Sep 8, 2024

동일한 문제 발생 중입니다. 참고로 암호화폐도 조회가 안되고 있습니다. 암호화폐 데이터 조회되시는 분 계신가요?

@jidon333
Copy link

jidon333 commented Sep 8, 2024

잠시 디버깅해보니

\Lib\site-packages\FinanceDataReader\yahoo\data.py 아래 부분에서 Exception에 걸리네요.

def _yahoo_data_reader(symbol, exchange, start, end):
start_ts = int(time.mktime(start.timetuple()))
end_ts = int(time.mktime(end.timetuple()))

url = (
    f'https://query1.finance.yahoo.com/v7/finance/download/{_map_symbol(symbol, exchange)}?'
    f'period1={start_ts}&period2={end_ts}&interval=1d&events=history&includeAdjustedClose=true'
)
try:
    df = pd.read_csv(url, parse_dates=True, index_col='Date')
except Exception as e:
    print(e, f' - symbol "{symbol}" not found or invalid periods')
    df = pd.DataFrame()

return df.loc[start:end]

생성된 URL을 브라우저에 복사해보면 아래와 같이 에러 발생합니다.

image

상식적으로 티커가 잘못될리는 없고
Yahoo Finance API 인증 관련해서 뭔가 바뀌었을수도 있겠네요.

@rtm8291
Copy link

rtm8291 commented Sep 8, 2024

yfinance으로 데이터 받아보니 FinanceDataReader로 받는 것보다 훨씬 느린데(1.5배 정도) 여기 라이브러리에서 쓰는 다른 비법이 있는 걸까요?

@FinanceData
Copy link
Owner

FinanceData commented Sep 9, 2024

한줄 요약: 긴급 FIX 하여 새로 릴리즈 하였습니다 (v0.9.94)

해외 데이터는 주로 yahoo finance 에서 가져옵니다.
지금까지 query1.finance.yahoo.com/v7 의 download 를 사용하고 있었는데요,
인증을 요구하는 것으로 보아 yahoo finance의 정책상의 변화가 있는 것으로 보입니다. (하단, reddit 참조)

https://query1.finance.yahoo.com/v7/finance/ (CSV) 에서
https://query2.finance.yahoo.com/v8/finance/ (JSON) 으로 수정하였습니다.

JSON으로 처리하는 관계로 일정정도 수정이 있습니다.
다음 내용들은 잘 동작 함을 확인하였습니다.

import FinanceDataReader as fdr

df = fdr.DataReader('TLT') # (기간 지정 하지 않은 경우 2002-07-30 ~ 현재)
df = fdr.DataReader('AAPL') # (기간 지정 하지 않은 경우 1980-12-12 ~ 현재)
df = fdr.DataReader('YAHOO:000100.KS') # 유한양행(000100), 2000-01-04 ~ 현재
df = fdr.DataReader('^NYICDX') # (^NYICDX) 달러인덱스 (1980~현재)
df = fdr.DataReader('YAHOO:^NYICDX') # 위와 동일

참조:
https://www.reddit.com/r/sheets/comments/1farvxr/broken_yahoo_finance_url/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants