# -*- coding: utf-8 -*-
"""
Created on Sun Jun 18 17:59:27 2023

@author: Administrator
https://github.com/ranaroussi/yfinance

pip install yfinance --upgrade --no-cache-dir
latest version: yfinance-0.2.20

"""
import yfinance as yf
import pandas as pd
import datetime, sys
from requests import Session
from requests_cache import CacheMixin, SQLiteCache
from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
from pyrate_limiter import Duration, RequestRate, Limiter

# Try to stay below the radar of yahoo finance
class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
    pass

session = CachedLimiterSession(
    limiter=Limiter(RequestRate(2, Duration.SECOND*5)), # max 2 requests per 5s
    bucket_class=MemoryQueueBucket,
    backend=SQLiteCache("yfinance.cache")
)                                         
session.headers['User-agent'] = 'yf_latest/1.0'

# Obtain company information from Yahoo
ticker = 'GM'
d = yf.Ticker(ticker, session=session)

try:
    info = d.info
except:
    print('Cannot download', ticker)
    sys.exit()


# Store the information on local hard disk
datafilename = ticker + '_officers.xlsx'
officers = pd.DataFrame(info['companyOfficers'][:])
officers.iloc[:].to_excel(datafilename)

datafilename = ticker + '_info.txt'
with open(datafilename, 'w', encoding='utf8') as fd:
    x = list(info.keys())   # get a list of data fields
    n, ss = len(x), ''
    for i in range(n):
        # Transform the unix date of integer to iso date string
        if x[i].find('Date') != -1 or x[i].find('YearEnd') != -1 \
           or x[i].find('Quarter') != -1:
               d = datetime.datetime.fromtimestamp(int(info[x[i]]))
               ss = d.isoformat()
        else:
            ss = str(info[x[i]])
        s = x[i] + '=' + ss    # generate a line of strings.
        print(s)
        fd.write(s+'\n')       # write a line with end of line symbol '\n'
fd.close()


















