Skip to content

Instantly share code, notes, and snippets.

@annaleighsmith
Last active October 22, 2021 17:09
Show Gist options
  • Save annaleighsmith/9438166cb6645d50813455234ec8911d to your computer and use it in GitHub Desktop.
Save annaleighsmith/9438166cb6645d50813455234ec8911d to your computer and use it in GitHub Desktop.
polygon_api_cycler
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"id": "d963f33e",
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"import datetime\n",
"import json\n",
"import pandas as pd\n",
"import time\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8eb42bae",
"metadata": {},
"outputs": [],
"source": [
"def api_requests(start_date, end_date, ticker, keys):\n",
" start_date_obj = datetime.datetime.strptime(start_date, '%Y-%m-%d')\n",
" end_date_obj = datetime.datetime.strptime(end_date, '%Y-%m-%d')\n",
" days_to_check = end_date_obj - start_date_obj\n",
" positive_days = days_to_check.days > 0\n",
" day_lookup_list = []\n",
" if positive_days is True:\n",
" for d in range(days_to_check.days):\n",
" each_day = start_date_obj + datetime.timedelta(days=d)\n",
" day_of_week = each_day.isoweekday()\n",
" if day_of_week == 6 or day_of_week == 7:\n",
" append_day = False\n",
" else:\n",
" append_day = True\n",
" day_lookup_list.append(each_day.strftime('%Y-%m-%d'))\n",
" \n",
" link_root = 'https://api.polygon.io/v1/open-close/'\n",
" adjusted = 'true'\n",
" key_count = len(keys)\n",
" use_key = 0\n",
" request_link_list = []\n",
" for each_day in day_lookup_list:\n",
" iter_keys = keys[use_key]\n",
" request_link = link_root + ticker + '/' + each_day + '?adjusted=' + adjusted +'&apiKey=' + iter_keys\n",
" request_link_list.append(request_link)\n",
" if (use_key + 1) == key_count:\n",
" use_key = 0\n",
" else:\n",
" use_key = use_key + 1\n",
" \n",
" response_list_data = []\n",
" for link in request_link_list:\n",
" response = requests.get(link)\n",
" if response.status_code == 200:\n",
" print(f\"Appended {response}:\\t {response.reason}\")\n",
" response_list_data.append(response.json())\n",
" else:\n",
" print(f'Did not Append {response}:\\t\\t{response.reason}')\n",
" \n",
" time.sleep(1.4)\n",
" \n",
" return response_list_data\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "13112e52",
"metadata": {
"code_folding": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n",
"Appended <Response [200]>:\t OK\n"
]
}
],
"source": [
"start_date = '2021-06-01'\n",
"end_date = '2021-06-30'\n",
"stock_abbr = \"MSFT\"\n",
"api_key_loop= ['12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" '12345678912345678912345678912345',\n",
" ]\n",
" \n",
"# EXECUTE FUNCTION\n",
"data_results = api_requests(start_date, end_date, stock_abbr, list(api_key_loop))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "7a434fee",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>status</th>\n",
" <th>from</th>\n",
" <th>symbol</th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" <th>volume</th>\n",
" <th>afterHours</th>\n",
" <th>preMarket</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>OK</td>\n",
" <td>2021-06-01</td>\n",
" <td>MSFT</td>\n",
" <td>251.230</td>\n",
" <td>251.2900</td>\n",
" <td>246.96</td>\n",
" <td>247.400</td>\n",
" <td>23213310</td>\n",
" <td>247.3500</td>\n",
" <td>250.93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>OK</td>\n",
" <td>2021-06-02</td>\n",
" <td>MSFT</td>\n",
" <td>248.125</td>\n",
" <td>249.2700</td>\n",
" <td>245.84</td>\n",
" <td>247.300</td>\n",
" <td>19406705</td>\n",
" <td>247.4300</td>\n",
" <td>247.14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>OK</td>\n",
" <td>2021-06-03</td>\n",
" <td>MSFT</td>\n",
" <td>245.220</td>\n",
" <td>246.3400</td>\n",
" <td>243.00</td>\n",
" <td>245.710</td>\n",
" <td>25108111</td>\n",
" <td>245.5500</td>\n",
" <td>247.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>OK</td>\n",
" <td>2021-06-04</td>\n",
" <td>MSFT</td>\n",
" <td>247.760</td>\n",
" <td>251.6500</td>\n",
" <td>247.51</td>\n",
" <td>250.790</td>\n",
" <td>25281094</td>\n",
" <td>250.8900</td>\n",
" <td>245.66</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>OK</td>\n",
" <td>2021-06-07</td>\n",
" <td>MSFT</td>\n",
" <td>249.980</td>\n",
" <td>254.0900</td>\n",
" <td>249.81</td>\n",
" <td>253.810</td>\n",
" <td>23079167</td>\n",
" <td>254.9000</td>\n",
" <td>249.97</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>OK</td>\n",
" <td>2021-06-08</td>\n",
" <td>MSFT</td>\n",
" <td>255.160</td>\n",
" <td>256.0100</td>\n",
" <td>252.51</td>\n",
" <td>252.570</td>\n",
" <td>22454998</td>\n",
" <td>252.5800</td>\n",
" <td>254.34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>OK</td>\n",
" <td>2021-06-09</td>\n",
" <td>MSFT</td>\n",
" <td>253.810</td>\n",
" <td>255.5300</td>\n",
" <td>253.21</td>\n",
" <td>253.590</td>\n",
" <td>17937634</td>\n",
" <td>253.4100</td>\n",
" <td>253.24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>OK</td>\n",
" <td>2021-06-10</td>\n",
" <td>MSFT</td>\n",
" <td>254.290</td>\n",
" <td>257.4600</td>\n",
" <td>253.67</td>\n",
" <td>257.240</td>\n",
" <td>24563619</td>\n",
" <td>258.5000</td>\n",
" <td>253.20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>OK</td>\n",
" <td>2021-06-11</td>\n",
" <td>MSFT</td>\n",
" <td>257.985</td>\n",
" <td>258.4868</td>\n",
" <td>256.61</td>\n",
" <td>257.890</td>\n",
" <td>18949731</td>\n",
" <td>257.6500</td>\n",
" <td>257.52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>OK</td>\n",
" <td>2021-06-14</td>\n",
" <td>MSFT</td>\n",
" <td>257.900</td>\n",
" <td>259.9500</td>\n",
" <td>256.80</td>\n",
" <td>259.890</td>\n",
" <td>19150507</td>\n",
" <td>259.6300</td>\n",
" <td>258.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>OK</td>\n",
" <td>2021-06-15</td>\n",
" <td>MSFT</td>\n",
" <td>259.775</td>\n",
" <td>259.9900</td>\n",
" <td>257.68</td>\n",
" <td>258.360</td>\n",
" <td>18016931</td>\n",
" <td>258.6400</td>\n",
" <td>259.96</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>OK</td>\n",
" <td>2021-06-16</td>\n",
" <td>MSFT</td>\n",
" <td>259.400</td>\n",
" <td>260.5800</td>\n",
" <td>254.42</td>\n",
" <td>257.380</td>\n",
" <td>27219955</td>\n",
" <td>255.5550</td>\n",
" <td>258.55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>OK</td>\n",
" <td>2021-06-17</td>\n",
" <td>MSFT</td>\n",
" <td>256.065</td>\n",
" <td>261.7500</td>\n",
" <td>256.01</td>\n",
" <td>260.900</td>\n",
" <td>27565537</td>\n",
" <td>261.1700</td>\n",
" <td>255.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>OK</td>\n",
" <td>2021-06-18</td>\n",
" <td>MSFT</td>\n",
" <td>259.630</td>\n",
" <td>262.3000</td>\n",
" <td>258.75</td>\n",
" <td>259.430</td>\n",
" <td>37162767</td>\n",
" <td>258.8999</td>\n",
" <td>261.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>OK</td>\n",
" <td>2021-06-21</td>\n",
" <td>MSFT</td>\n",
" <td>259.820</td>\n",
" <td>263.5200</td>\n",
" <td>257.92</td>\n",
" <td>262.630</td>\n",
" <td>26696119</td>\n",
" <td>263.0000</td>\n",
" <td>259.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>OK</td>\n",
" <td>2021-06-22</td>\n",
" <td>MSFT</td>\n",
" <td>262.720</td>\n",
" <td>265.7900</td>\n",
" <td>262.40</td>\n",
" <td>265.510</td>\n",
" <td>24694090</td>\n",
" <td>266.0000</td>\n",
" <td>261.69</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>OK</td>\n",
" <td>2021-06-23</td>\n",
" <td>MSFT</td>\n",
" <td>265.990</td>\n",
" <td>266.8300</td>\n",
" <td>264.43</td>\n",
" <td>265.275</td>\n",
" <td>19518681</td>\n",
" <td>265.4050</td>\n",
" <td>266.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>OK</td>\n",
" <td>2021-06-24</td>\n",
" <td>MSFT</td>\n",
" <td>266.160</td>\n",
" <td>267.8500</td>\n",
" <td>265.47</td>\n",
" <td>266.690</td>\n",
" <td>21346867</td>\n",
" <td>266.9800</td>\n",
" <td>265.87</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>OK</td>\n",
" <td>2021-06-25</td>\n",
" <td>MSFT</td>\n",
" <td>266.230</td>\n",
" <td>267.2500</td>\n",
" <td>264.76</td>\n",
" <td>265.020</td>\n",
" <td>23891113</td>\n",
" <td>265.0200</td>\n",
" <td>267.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>OK</td>\n",
" <td>2021-06-28</td>\n",
" <td>MSFT</td>\n",
" <td>266.185</td>\n",
" <td>268.9000</td>\n",
" <td>265.91</td>\n",
" <td>268.720</td>\n",
" <td>19590024</td>\n",
" <td>268.4500</td>\n",
" <td>265.83</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>OK</td>\n",
" <td>2021-06-29</td>\n",
" <td>MSFT</td>\n",
" <td>268.865</td>\n",
" <td>271.6500</td>\n",
" <td>267.98</td>\n",
" <td>271.400</td>\n",
" <td>19921311</td>\n",
" <td>271.3800</td>\n",
" <td>268.46</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" status from symbol open high low close volume \\\n",
"0 OK 2021-06-01 MSFT 251.230 251.2900 246.96 247.400 23213310 \n",
"1 OK 2021-06-02 MSFT 248.125 249.2700 245.84 247.300 19406705 \n",
"2 OK 2021-06-03 MSFT 245.220 246.3400 243.00 245.710 25108111 \n",
"3 OK 2021-06-04 MSFT 247.760 251.6500 247.51 250.790 25281094 \n",
"4 OK 2021-06-07 MSFT 249.980 254.0900 249.81 253.810 23079167 \n",
"5 OK 2021-06-08 MSFT 255.160 256.0100 252.51 252.570 22454998 \n",
"6 OK 2021-06-09 MSFT 253.810 255.5300 253.21 253.590 17937634 \n",
"7 OK 2021-06-10 MSFT 254.290 257.4600 253.67 257.240 24563619 \n",
"8 OK 2021-06-11 MSFT 257.985 258.4868 256.61 257.890 18949731 \n",
"9 OK 2021-06-14 MSFT 257.900 259.9500 256.80 259.890 19150507 \n",
"10 OK 2021-06-15 MSFT 259.775 259.9900 257.68 258.360 18016931 \n",
"11 OK 2021-06-16 MSFT 259.400 260.5800 254.42 257.380 27219955 \n",
"12 OK 2021-06-17 MSFT 256.065 261.7500 256.01 260.900 27565537 \n",
"13 OK 2021-06-18 MSFT 259.630 262.3000 258.75 259.430 37162767 \n",
"14 OK 2021-06-21 MSFT 259.820 263.5200 257.92 262.630 26696119 \n",
"15 OK 2021-06-22 MSFT 262.720 265.7900 262.40 265.510 24694090 \n",
"16 OK 2021-06-23 MSFT 265.990 266.8300 264.43 265.275 19518681 \n",
"17 OK 2021-06-24 MSFT 266.160 267.8500 265.47 266.690 21346867 \n",
"18 OK 2021-06-25 MSFT 266.230 267.2500 264.76 265.020 23891113 \n",
"19 OK 2021-06-28 MSFT 266.185 268.9000 265.91 268.720 19590024 \n",
"20 OK 2021-06-29 MSFT 268.865 271.6500 267.98 271.400 19921311 \n",
"\n",
" afterHours preMarket \n",
"0 247.3500 250.93 \n",
"1 247.4300 247.14 \n",
"2 245.5500 247.00 \n",
"3 250.8900 245.66 \n",
"4 254.9000 249.97 \n",
"5 252.5800 254.34 \n",
"6 253.4100 253.24 \n",
"7 258.5000 253.20 \n",
"8 257.6500 257.52 \n",
"9 259.6300 258.29 \n",
"10 258.6400 259.96 \n",
"11 255.5550 258.55 \n",
"12 261.1700 255.00 \n",
"13 258.8999 261.00 \n",
"14 263.0000 259.56 \n",
"15 266.0000 261.69 \n",
"16 265.4050 266.29 \n",
"17 266.9800 265.87 \n",
"18 265.0200 267.00 \n",
"19 268.4500 265.83 \n",
"20 271.3800 268.46 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df=pd.DataFrame(data_results)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "ee8cd5c3",
"metadata": {},
"outputs": [],
"source": [
"CREATION_DATE = str(datetime.date.today())\n",
"delim = \"_\"\n",
"folder = \"stock_data/\"\n",
"file_name = folder + CREATION_DATE + delim + stock_abbr + delim + \"output.csv\"\n",
"df.to_csv(file_name, mode='w', header=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7c55b1d6",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment