File size: 1,431 Bytes
525ed3a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import datetime
from datetime import date, timedelta
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
API_KEY = "e1f10a1e78da46f5b10a1e78da96f525"
BASE_URL = "https://api.weather.com/v1/location/KDCA:9:US/observations/historical.json?apiKey={api_key}&units=e&startDate={start_date}&endDate={end_date}"
urls = []
target_date = date(2000, 1, 1)
today = datetime.date.today()
while target_date != today:
end_date = target_date + timedelta(days=1)
start_date_str = target_date.strftime("%Y%m%d")
target_url = BASE_URL.format(api_key=API_KEY, start_date=start_date_str, end_date=start_date_str)
urls.append(target_url)
target_date = end_date
from concurrent.futures import ThreadPoolExecutor, as_completed
from time import perf_counter as time
from requests_cache import CachedSession
def send_requests():
session = CachedSession('./data/weather_api_cache')
start = time()
with ThreadPoolExecutor(max_workers=16) as executor:
future_to_url = {executor.submit(session.get, url): url for url in urls}
for future in as_completed(future_to_url):
url = future_to_url[future]
response = future.result()
from_cache = 'hit' if response.from_cache else 'miss'
print(f'{url} is {len(response.content)} bytes (cache {from_cache})')
print(f'Elapsed: {time() - start:.3f} seconds')
if __name__ == '__main__':
send_requests()
# send_requests()
|