Вытащить определенный период времени данных из запроса API - PullRequest
0 голосов
/ 31 марта 2020
import requests,json
from datetime import datetime

func = 'function=TIME_SERIES_DAILY'
sym = 'symbol=AAPL'
inter = 'interval=10min'
apikey = 'apikey=XXXXXXXXXXXXX'
url = XXXXXXXXXXXX

resp = requests.get(url)
data = json.loads(resp.content)
d = data['Time Series (Daily)']

maxdate = max((x for x in d.keys()), key=lambda x: datetime.strptime(x, "%Y-%m-%d"))
#pull_number = 5
print(d[maxdate])

Используя приведенный выше код, я могу получить самые последние данные о запасах, я взял Apple в качестве примера, это вытаскивает следующие данные:

{'1. open ':' 250.7400 ',' 2. высокая ':' 255,5200 ',' 3. низкая ':' 249,4000 ',' 4. закрыть ':' 254.8100 ',' 5. volume ':' 41863171 '}

Это дает мне последние данные, как мне извлечь данные за определенный промежуток времени, ie 1 неделя? Кроме того, я поставил его, чтобы дать мне данные каждого дня, а не ежечасно

Данные, которые были извлечены:

{'Meta Data': {'1. Information': 'Daily Prices (open, high, low, close) and Volumes', '2. Symbol': 'AAPL', '3. Last Refreshed': '2020-03-30', '4. Output Size': 'Compact', '5. Time Zone': 'US/Eastern'}, 'Time Series (Daily)': {'2020-03-30': {'1. open': '250.7400', '2. high': '255.5200', '3. low': '249.4000', '4. close': '254.8100', '5. volume': '41863171'}, '2020-03-27': {'1. open': '252.7500', '2. high': '255.8700', '3. low': '247.0500', '4. close': '247.7400', '5. volume': '51054153'}, '2020-03-26': {'1. open': '246.5200', '2. high': '258.6800', '3. low': '246.3600', '4. close': '258.4400', '5. volume': '63140169'}, '2020-03-25': {'1. open': '250.7500', '2. high': '258.2500', '3. low': '244.3000', '4. close': '245.5200', '5. volume': '75900510'}, '2020-03-24': {'1. open': '236.3600', '2. high': '247.6900', '3. low': '234.3000', '4. close': '246.8800', '5. volume': '71882773'}, '2020-03-23': {'1. open': '228.0800', '2. high': '228.4997', '3. low': '212.6100', '4. close': '224.3700', '5. volume': '84188208'}, '2020-03-20': {'1. open': '247.1800', '2. high': '251.8300', '3. low': '228.0000', '4. close': '229.2400', '5. volume': '100423346'}, '2020-03-19': {'1. open': '247.3850', '2. high': '252.8400', '3. low': '242.6100', '4. close': '244.7800', '5. volume': '67964255'}, '2020-03-18': {'1. open': '239.7700', '2. high': '250.0000', '3. low': '237.1200', '4. close': '246.6700', '5. volume': '75058406'}, '2020-03-17': {'1. open': '247.5100', '2. high': '257.6100', '3. low': '238.4000', '4. close': '252.8600', '5. volume': '81013965'}, '2020-03-16': {'1. open': '241.9500', '2. high': '259.0800', '3. low': '240.0000', '4. close': '242.2100', '5. volume': '80605865'}, '2020-03-13': {'1. open': '264.8900', '2. high': '279.9200', '3. low': '252.9500', '4. close': '277.9700', '5. volume': '92683032'}, '2020-03-12': {'1. open': '255.9400', '2. high': '270.0000', '3. low': '248.0000', '4. close': '248.2300', '5. volume': '104618517'}, '2020-03-11': {'1. open': '277.3900', '2. high': '281.2200', '3. low': '271.8600', '4. close': '275.4300', '5. volume': '64094970'}, '2020-03-10': {'1. open': '277.1400', '2. high': '286.4400', '3. low': '269.3700', '4. close': '285.3400', '5. volume': '71322520'}, '2020-03-09': {'1. open': '263.7500', '2. high': '278.0900', '3. low': '263.0000', '4. close': '266.1700', '5. volume': '71686208'}, '2020-03-06': {'1. open': '282.0000', '2. high': '290.8200', '3. low': '281.2300', '4. close': '289.0300', '5. volume': '56544246'}, '2020-03-05': {'1. open': '295.5200', '2. high': '299.5500', '3. low': '291.4100', '4. close': '292.9200', '5. volume': '46893219'}, '2020-03-04': {'1. open': '296.4400', '2. high': '303.4000', '3. low': '293.1300', '4. close': '302.7400', '5. volume': '54794568'}, '2020-03-03': {'1. open': '303.6700', '2. high': '304.0000', '3. low': '285.8000', '4. close': '289.3200', '5. volume': '79868852'}, '2020-03-02': {'1. open': '282.2800', '2. high': '301.4400', '3. low': '277.7200', '4. close': '298.8100', '5. volume': '85349339'}, '2020-02-28': {'1. open': '257.2600', '2. high': '278.4100', '3. low': '256.3700', '4. close': '273.3600', '5. volume': '106721230'}, '2020-02-27': {'1. open': '281.1000', '2. high': '286.0000', '3. low': '272.9600', '4. close': '273.5200', '5. volume': '80151381'}, '2020-02-26': {'1. open': '286.5300', '2. high': '297.8800', '3. low': '286.5000', '4. close': '292.6500', '5. volume': '49678431'}, '2020-02-25': {'1. open': '300.9500', '2. high': '302.5300', '3. low': '286.1300', '4. close': '288.0800', '5. volume': '57668364'}, '2020-02-24': {'1. open': '297.2600', '2. high': '304.1800', '3. low': '289.2300', '4. close': '298.1800', '5. volume': '55548828'}, '2020-02-21': {'1. open': '318.6200', '2. high': '320.4500', '3. low': '310.5000', '4. close': '313.0500', '5. volume': '32426415'}, '2020-02-20': {'1. open': '322.6300', '2. high': '324.6500', '3. low': '318.2100', '4. close': '320.3000', '5. volume': '25141489'}, '2020-02-19': {'1. open': '320.0000', '2. high': '324.5700', '3. low': '320.0000', '4. close': '323.6200', '5. volume': '23495991'}, '2020-02-18': {'1. open': '315.3600', '2. high': '319.7500', '3. low': '314.6100', '4. close': '319.0000', '5. volume': '38190545'}, '2020-02-14': {'1. open': '324.7300', '2. high': '325.9800', '3. low': '322.8500', '4. close': '324.9500', '5. volume': '20028447'}, '2020-02-13': {'1. open': '324.1900', '2. high': '326.2200', '3. low': '323.3500', '4. close': '324.8700', '5. volume': '23686892'}, '2020-02-12': {'1. open': '321.4700', '2. high': '327.2200', '3. low': '321.4700', '4. close': '327.2000', '5. volume': '28432573'}, '2020-02-11': {'1. open': '323.6000', '2. high': '323.9000', '3. low': '318.7100', '4. close': '319.6100', '5. volume': '23580780'}, '2020-02-10': {'1. open': '314.1800', '2. high': '321.5500', '3. low': '313.8500', '4. close': '321.5500', '5. volume': '27337215'}, '2020-02-07': {'1. open': '322.3700', '2. high': '323.4000', '3. low': '318.0000', '4. close': '320.0300', '5. volume': '29421012'}, '2020-02-06': {'1. open': '322.5700', '2. high': '325.2200', '3. low': '320.2648', '4. close': '325.2100', '5. volume': '26356385'}, '2020-02-05': {'1. open': '323.5200', '2. high': '324.7600', '3. low': '318.9500', '4. close': '321.4500', '5. volume': '29706718'}, '2020-02-04': {'1. open': '315.3100', '2. high': '319.6400', '3. low': '313.6345', '4. close': '318.8500', '5. volume': '34154134'}, '2020-02-03': {'1. open': '304.3000', '2. high': '313.4900', '3. low': '302.2200', '4. close': '308.6600', '5. volume': '43496401'}, '2020-01-31': {'1. open': '320.9300', '2. high': '322.6800', '3. low': '308.2900', '4. close': '309.5100', '5. volume': '49897096'}, '2020-01-30': {'1. open': '320.5435', '2. high': '324.0900', '3. low': '318.7500', '4. close': '323.8700', '5. volume': '31685808'}, '2020-01-29': {'1. open': '324.4500', '2. high': '327.8500', '3. low': '321.3800', '4. close': '324.3400', '5. volume': '54149928'}, '2020-01-28': {'1. open': '312.6000', '2. high': '318.4000', '3. low': '312.1900', '4. close': '317.6900', '5. volume': '40558486'}, '2020-01-27': {'1. open': '310.0600', '2. high': '311.7700', '3. low': '304.8800', '4. close': '308.9500', '5. volume': '40485005'}, '2020-01-24': {'1. open': '320.2500', '2. high': '323.3300', '3. low': '317.5188', '4. close': '318.3100', '5. volume': '36634380'}, '2020-01-23': {'1. open': '317.9200', '2. high': '319.5600', '3. low': '315.6500', '4. close': '319.2300', '5. volume': '26117993'}, '2020-01-22': {'1. open': '318.5800', '2. high': '319.9900', '3. low': '317.3100', '4. close': '317.7000', '5. volume': '25458115'}, '2020-01-21': {'1. open': '317.1900', '2. high': '319.0200', '3. low': '316.0000', '4. close': '316.5700', '5. volume': '27235039'}, '2020-01-17': {'1. open': '316.2700', '2. high': '318.7400', '3. low': '315.0000', '4. close': '318.7300', '5. volume': '34454117'}, '2020-01-16': {'1. open': '313.5900', '2. high': '315.7000', '3. low': '312.0900', '4. close': '315.2400', '5. volume': '27207254'}, '2020-01-15': {'1. open': '311.8500', '2. high': '315.5000', '3. low': '309.5500', '4. close': '311.3400', '5. volume': '30480882'}, '2020-01-14': {'1. open': '316.7000', '2. high': '317.5700', '3. low': '312.1700', '4. close': '312.6800', '5. volume': '40653457'}, '2020-01-13': {'1. open': '311.6400', '2. high': '317.0700', '3. low': '311.1500', '4. close': '316.9600', '5. volume': '30028742'}, '2020-01-10': {'1. open': '310.6000', '2. high': '312.6700', '3. low': '308.2500', '4. close': '310.3300', '5. volume': '35217272'}, '2020-01-09': {'1. open': '307.2350', '2. high': '310.4300', '3. low': '306.2000', '4. close': '309.6300', '5. volume': '42621542'}, '2020-01-08': {'1. open': '297.1600', '2. high': '304.4399', '3. low': '297.1560', '4. close': '303.1900', '5. volume': '33090946'}, '2020-01-07': {'1. open': '299.8400', '2. high': '300.9000', '3. low': '297.4800', '4. close': '298.3900', '5. volume': '27877655'}, '2020-01-06': {'1. open': '293.7900', '2. high': '299.9600', '3. low': '292.7500', '4. close': '299.8000', '5. volume': '29644644'}, '2020-01-03': {'1. open': '297.1500', '2. high': '300.5800', '3. low': '296.5000', '4. close': '297.4300', '5. volume': '36633878'}, '2020-01-02': {'1. open': '296.2400', '2. high': '300.6000', '3. low': '295.1900', '4. close': '300.3500', '5. volume': '33911864'}, '2019-12-31': {'1. open': '289.9300', '2. high': '293.6800', '3. low': '289.5200', '4. close': '293.6500', '5. volume': '25247625'}, '2019-12-30': {'1. open': '289.4600', '2. high': '292.6900', '3. low': '285.2200', '4. close': '291.5200', '5. volume': '36059614'}, '2019-12-27': {'1. open': '291.1200', '2. high': '293.9700', '3. low': '288.1200', '4. close': '289.8000', '5. volume': '36592936'}, '2019-12-26': {'1. open': '284.8200', '2. high': '289.9800', '3. low': '284.7000', '4. close': '289.9100', '5. volume': '23334004'}, '2019-12-24': {'1. open': '284.6900', '2. high': '284.8900', '3. low': '282.9197', '4. close': '284.2700', '5. volume': '12119714'}, '2019-12-23': {'1. open': '280.5300', '2. high': '284.2500', '3. low': '280.3735', '4. close': '284.0000', '5. volume': '24677883'}, '2019-12-20': {'1. open': '282.2300', '2. high': '282.6500', '3. low': '278.5600', '4. close': '279.4400', '5. volume': '69032743'}, '2019-12-19': {'1. open': '279.5000', '2. high': '281.1800', '3. low': '278.9500', '4. close': '280.0200', '5. volume': '24626947'}, '2019-12-18': {'1. open': '279.8000', '2. high': '281.9000', '3. low': '279.1200', '4. close': '279.7400', '5. volume': '29024687'}, '2019-12-17': {'1. open': '279.5700', '2. high': '281.7700', '3. low': '278.8000', '4. close': '280.4100', '5. volume': '28575798'}, '2019-12-16': {'1. open': '277.0000', '2. high': '280.7900', '3. low': '276.9800', '4. close': '279.8600', '5. volume': '32081105'}, '2019-12-13': {'1. open': '271.4600', '2. high': '275.3000', '3. low': '270.9300', '4. close': '275.1500', '5. volume': '33432806'}, '2019-12-12': {'1. open': '267.7800', '2. high': '272.5599', '3. low': '267.3210', '4. close': '271.4600', '5. volume': '34437042'}, '2019-12-11': {'1. open': '268.8100', '2. high': '271.1000', '3. low': '268.5000', '4. close': '270.7700', '5. volume': '19723391'}, '2019-12-10': {'1. open': '268.6000', '2. high': '270.0700', '3. low': '265.8600', '4. close': '268.4800', '5. volume': '22632383'}, '2019-12-09': {'1. open': '270.0000', '2. high': '270.8000', '3. low': '264.9100', '4. close': '266.9200', '5. volume': '32182645'}, '2019-12-06': {'1. open': '267.4800', '2. high': '271.0000', '3. low': '267.3000', '4. close': '270.7100', '5. volume': '26547493'}, '2019-12-05': {'1. open': '263.7900', '2. high': '265.8900', '3. low': '262.7300', '4. close': '265.5800', '5. volume': '18661343'}, '2019-12-04': {'1. open': '261.0700', '2. high': '263.3100', '3. low': '260.6800', '4. close': '261.7400', '5. volume': '16810388'}, '2019-12-03': {'1. open': '258.3100', '2. high': '259.5300', '3. low': '256.2900', '4. close': '259.4500', '5. volume': '29377268'}, '2019-12-02': {'1. open': '267.2700', '2. high': '268.2500', '3. low': '263.4500', '4. close': '264.1600', '5. volume': '23693550'}, '2019-11-29': {'1. open': '266.6000', '2. high': '268.0000', '3. low': '265.9000', '4. close': '267.2500', '5. volume': '11654363'}, '2019-11-27': {'1. open': '265.5800', '2. high': '267.9800', '3. low': '265.3100', '4. close': '267.8400', '5. volume': '16386122'}, '2019-11-26': {'1. open': '266.9400', '2. high': '267.1600', '3. low': '262.5000', '4. close': '264.2900', '5. volume': '26334882'}, '2019-11-25': {'1. open': '262.7100', '2. high': '266.4400', '3. low': '262.5200', '4. close': '266.3700', '5. volume': '21029517'}, '2019-11-22': {'1. open': '262.5900', '2. high': '263.1800', '3. low': '260.8400', '4. close': '261.7800', '5. volume': '16331263'}, '2019-11-21': {'1. open': '263.6900', '2. high': '264.0050', '3. low': '261.1800', '4. close': '262.0100', '5. volume': '30348778'}, '2019-11-20': {'1. open': '265.5400', '2. high': '266.0830', '3. low': '260.4000', '4. close': '263.1900', '5. volume': '26609919'}, '2019-11-19': {'1. open': '267.9000', '2. high': '268.0000', '3. low': '265.3926', '4. close': '266.2900', '5. volume': '19069597'}, '2019-11-18': {'1. open': '265.8000', '2. high': '267.4300', '3. low': '264.2300', '4. close': '267.1000', '5. volume': '21700897'}, '2019-11-15': {'1. open': '263.6800', '2. high': '265.7800', '3. low': '263.0100', '4. close': '265.7600', '5. volume': '25093666'}, '2019-11-14': {'1. open': '263.7500', '2. high': '264.8800', '3. low': '262.1000', '4. close': '262.6400', '5. volume': '22395556'}, '2019-11-13': {'1. open': '261.1300', '2. high': '264.7800', '3. low': '261.0700', '4. close': '264.4700', '5. volume': '25817593'}, '2019-11-12': {'1. open': '261.5500', '2. high': '262.7900', '3. low': '260.9200', '4. close': '261.9600', '5. volume': '21847226'}, '2019-11-11': {'1. open': '258.3000', '2. high': '262.4700', '3. low': '258.2800', '4. close': '262.2000', '5. volume': '20507459'}, '2019-11-08': {'1. open': '258.6900', '2. high': '260.4400', '3. low': '256.8500', '4. close': '260.1400', '5. volume': '17520495'}, '2019-11-07': {'1. open': '258.7400', '2. high': '260.3500', '3. low': '258.1100', '4. close': '259.4300', '5. volume': '23735083'}, '2019-11-06': {'1. open': '256.7700', '2. high': '257.4900', '3. low': '255.3650', '4. close': '257.2400', '5. volume': '18966124'}, '2019-11-05': {'1. open': '257.0500', '2. high': '258.1900', '3. low': '256.3200', '4. close': '257.1300', '5. volume': '19974427'}}}

Также я немного новичок в python, поэтому, пожалуйста, извините меня за любые ошибки, я начал год назад, но я оставил кодирование из-за моих экзаменов. Существует неиспользуемая переменная, которая называется pull_number - сколько дней ie 5 дней запросов акций API с сегодняшнего дня до 5 дней go.

1 Ответ

1 голос
/ 31 марта 2020

Вы заметите, что при ежедневном использовании у вас есть даты в формате YYYY-MM-DD, который очень удобно естественным образом упорядочивать. Таким образом, все, что вам нужно сделать, чтобы взять последние pull_number доступные даты:

d = data['Time Series (Daily)']

print([(date, d[date]) for date in sorted(d, reverse=True)[:pull_number]])

Это работает, сортируя ключи словаря в обратном (нисходящем) порядке, а затем беря только первые pull_number (чтобы они от самых новых до самых старых). Вы также не можете отменить это и взять последние pull_number записи с sorted(d)[-pull_number:] (но теперь они от самых старых до самых новых).

...