Я использую Flask и Pandas для создания простого api. Но ниже приведена основная функция, которая только возвращает Dates
из результата на heroku.
def positions_data(days=3):
result = {}
url_dates = result['Dates'] = get_dates(days)
derivative_dic = defaultdict(dict)
for date in url_dates:
df = get_dataframe(date)
# print(df)
df = df.applymap(remove_comma)
# print(df)
if df.shape[0] != 0:
extract_fii_data(df,derivative_dic)
else:
url_dates.remove(date)
result['Dates'] = [datetime.strptime(x,'%d%m%Y').strftime('%d-%b-%Y') for x in url_dates]
result.update(derivative_dic)
return result
get_dataframe
делает http запрос на получение файла csv , затем я использую эти данные и обновляю результат и возвращаю его. это нормально работает на локальном хосте, но когда я развернул его на heroku, он только возвращает ключ Dates
из словаря результатов.
Две функции для получения фреймов данных
def get_dataframe(date:str):
url = 'https://archives.nseindia.com/content/nsccl/fao_participant_oi_{0}.csv'.format(date)
print(url)
csv_data = get_url_data(url)
csv_col_names = ["Type","FIL","FIS","FSL","FSS","OILC","OILP","OISC","OISP","OSLC","OSLP","OSSC","OSSP","TL","TS"]
if csv_data != 'NA':
df = pd.read_csv(StringIO(csv_data),index_col='Type',skiprows=1,header=0,names=csv_col_names)
else:
print("empty data frame")
df = pd.DataFrame({})
return df
def get_url_data(url:str):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
data = requests.get(url,headers=headers)
if data.status_code == 200 and data.headers['Content-Type'] == 'text/csv':
output = data.text
else:
output = "NA"
return output