0

I'm having trouble figuring out how to make this work. I have this dataframe read from a csv:

        Ticker Nome File Ticker No - Data Inizio   Data Fine
0  AABA-201910   AABA_NQ        AABA  16/09/1998  16/06/2017
1          AAL    AAL_NQ         AAL  22/12/2014  17/04/2020
2         AAPL   AAPL_NQ        AAPL  03/01/1995  12/09/2021
3  ABGX-200603   ABGX_NQ        ABGX  18/12/2000  20/12/2002

And i need to use data from every row in a link like this: "https://api.tiingo.com/tiingo/daily/AAPL/prices?startDate=1995-03-01&endDate=2021-01-01"

With the code below I get data in the right format (I suppose) but I still get error because of wrong format data:

        Ticker Nome File Ticker No - Data Inizio   Data Fine
0  AABA-201910   AABA_NQ        AABA  1998-09-16  2017-06-16
1          AAL    AAL_NQ         AAL  2014-12-22  2020-04-17
2         AAPL   AAPL_NQ        AAPL  1995-03-01  2021-12-09
3  ABGX-200603   ABGX_NQ        ABGX  2000-12-18  2002-12-20

Thats the code I'm trying to use:

import requests
import time
from bs4 import BeautifulSoup
import json
import os
import pandas as pd
from win32com.client import Dispatch

df= pd.read_csv('NQ TICKER BIAS 1.csv',delimiter=";")
symbol=df["Ticker No -"].to_string(index=False)
symbolfile=df["Nome File"].to_string(index=False)
df["Data Inizio"]=pd.to_datetime(df["Data Inizio"]).dt.strftime('%Y-%m-%d')
df["Data Fine"]=pd.to_datetime(df["Data Fine"]).dt.strftime('%Y-%m-%d')
start_date=df["Data Inizio"].to_string(index=False)
end_date=df["Data Fine"].to_string(index=False)
headers = {MY API}     
  
#print ("downloading",symbol, "...")

try:
     response = requests.get("https://api.tiingo.com/tiingo/daily/"+symbol+"/prices?startDate="+start_date+"&endDate="+end_date,headers=headers)
     soup = BeautifulSoup(response.content, "html.parser")
     print(soup)     
     print ("finished writing ",symbol,"txt file.") 
except: 
   print ("error downloading ",symbol)

The result of print(soup):

["Error: Symbol format was not correct."]
["Error: Start date format was not correct. Must be in YYYY-MM-DD format."]
["Error: End date format was not correct. Must be in YYYY-MM-DD format."]

When I use as end_date dateToday I dont get any error for End date:

dateToday = str(time.strftime("%Y-%m-%d"))

So I believe I'm doing something wrong on converting dataframe to string

2 Answers 2

1

Make sure you fully use the dataframe capabilites, like iterating over rows etc. Your code seems correct so far, I've cleaned it up a little and parsed the reponses.

import requests
import pandas as pd
import json

df= pd.read_csv('NQ TICKER BIAS 1.csv',delimiter=",")

df["Data Inizio"]=pd.to_datetime(df["Data Inizio"]).dt.strftime('%Y-%m-%d')
df["Data Fine"]=pd.to_datetime(df["Data Fine"]).dt.strftime('%Y-%m-%d')


headers = {'Content-Type': 'application/json'}     

for symbol, file_name, ticker_number, start_date, end_date in df.itertuples(index=None):
    try:
        url = "https://api.tiingo.com/tiingo/daily/"+symbol+"/prices?startDate="+start_date+"&endDate="+end_date+"&token="+"4723bf31f081f38876619769ff973de887639b01"
        print(f"Getting {url}")
        response = requests.get(url ,headers=headers)
        resp_json = response.json()
        with open(f"{symbol}.json", "w") as fp:
            json.dump(resp_json, fp)
    except: 
        print ("error downloading ",symbol)
Sign up to request clarification or add additional context in comments.

Comments

0

You can use this example how to construct the url:

# if columns are converted already, skip it:
df["Data Inizio"] = pd.to_datetime(df["Data Inizio"])
df["Data Fine"] = pd.to_datetime(df["Data Fine"])

url = "https://api.tiingo.com/tiingo/daily/{ticker}/prices?startDate={start_date}&endDate={end_date}"
df["url"] = df.apply(
    lambda x: url.format(
        ticker=x["Ticker No -"],
        start_date=x["Data Inizio"].strftime("%Y-%m-%d"),
        end_date=x["Data Fine"].strftime("%Y-%m-%d"),
    ),
    axis=1,
)

# now you can use the `url` column:
for u in df["url"]:
    print(u)
    # response = requests.get(u)
    # soup = BeautifulSoup(response.content, "html.parser")
    # ...

Prints:

https://api.tiingo.com/tiingo/daily/AABA/prices?startDate=1998-09-16&endDate=2017-06-16
https://api.tiingo.com/tiingo/daily/AAL/prices?startDate=2014-12-22&endDate=2020-04-17
https://api.tiingo.com/tiingo/daily/AAPL/prices?startDate=1995-03-01&endDate=2021-12-09
https://api.tiingo.com/tiingo/daily/ABGX/prices?startDate=2000-12-18&endDate=2002-12-20

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.