· 5 years ago · Feb 13, 2021, 03:28 PM
1def api_key_replacer(apikey, secondary_api_keys):
2 if apikey in secondary_api_keys:
3 secondary_api_keys.remove(apikey)
4 if len(secondary_api_keys) > 0:
5 key = random.choice(secondary_api_keys)
6 return key, secondary_api_keys
7 else:
8 return print('Create new API key')
9
10
11def get_ce_series_data():
12 ids_list = series_id_processor()
13
14 with requests.Session() as session:
15
16 # перебираем массив групп ID для итерации по каждой группе
17 for id_group in ids_list:
18
19 # Отправлем запросы в цикле, чтобы получить данные за все приоды по текущий год
20 registrationkey = 'd4aa1419d6c746e1b3a9ff4b673fa274'
21 secondary_registrationkey = ['2830cbda8b2447c8b9eaba3f5d462bec', 'b88f48e2135e41a2b59ac9373254705e',
22 'da2176c3406b4df5881270b2e76b7842', '5ff5845da58945518033c9bf4e8b6975',
23 'b6dfac5bc04c44a7a0ea1ae626e94ec7']
24 current_year = datetime.now().year
25 start_year = 1939
26 counter = True
27 while counter:
28 end_year = start_year + 19
29 if end_year > current_year:
30 end_year = current_year
31 request_data = json.dumps({
32 "seriesid": id_group,
33 "registrationkey": registrationkey,
34 "catalog": True,
35 "startyear": str(start_year),
36 "endyear": str(end_year),
37 "calculations": True,
38 "annualaverage": True,
39 "aspects": True
40 })
41 # Возможно придется использовать прокси "proxies={'https': 'http://Selarthurolevsky:B1g8HvD@181.215.41.239:45785'}"
42 req = session.post('https://api.bls.gov/publicAPI/v2/timeseries/data/',
43 data=request_data,
44 headers={'Content-type': 'application/json'}
45 ).json()
46 if req['status'] == 'REQUEST_NOT_PROCESSED':
47 print(f"{registrationkey}, {req['status']}, {req['message']}")
48 print(f'Changing API Key on {ids_list.index(id_group)}')
49 registrationkey, secondary_registrationkey = api_key_replacer(registrationkey,
50 secondary_registrationkey)
51 if req['status'] == 'REQUEST_SUCCEEDED':
52 # Обрабатываем ответ. На выходе получаем массив с недействительными ID, даные и статус перышения лимита запросов
53 series_data, request_exceeded_status = request_processor(request=req)
54 write_to_db(series_data)
55 # меняем временной период запроса. Если последний запрашиваемый год равен текущему тогда завершаем цикл
56 if end_year == current_year:
57 counter = False
58 start_year += 20