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()