· 5 years ago · Aug 26, 2020, 05:44 PM
1import asyncio
2import datetime
3import json
4import sqlite3
5from time import time
6import aiohttp
7
8URL = 'http://api-dev.contragents.ru/'
9
10
11def db_create():
12 database = sqlite3.connect('base_OGRN.sqlite3')
13 cursor = database.cursor()
14 cursor.executescript('''
15 CREATE TABLE IF NOT EXISTS Действующие_фирмы(
16 Статус TEXT,
17 КПП INTEGER,
18 Уставной_капитал TEXT,
19 ИМЯ_Директор TEXT,
20 Должность TEXT,
21 Учередитель TEXT,
22 Абривиатура_сокр TEXT,
23 Абривиатура_полн TEXT,
24 Название_сокр TEXT,
25 Название_полн TEXT,
26 ИНН INTEGER UNIQUE,
27 ОГРН INTEGER,
28 ОКПО INTEGER,
29 ОКВЕД INTEGER,
30 Адресс_полн TEXT,
31 Индекс INTEGER,
32 Страна TEXT,
33 Фед_округ TEXT,
34 Город TEXT,
35 Район_города TEXT,
36 Тип_района_города TEXT,
37 КЛАРД INTEGER,
38 Улица TEXT,
39 ОКАТО INTEGER,
40 ОКТМО INTEGER,
41 Время TEXT,
42 Дата_ОГРН TEXT,
43 Дата_Рег TEXT,
44 Тел INTEGER,
45 Эл_почта TEXT
46)''')
47
48
49def db_info_com(info):
50 database = sqlite3.connect('base_OGRN.sqlite3')
51 cursor = database.cursor()
52 cursor.execute('''INSERT INTO Действующие_фирмы VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
53 ?,?);''', info)
54 database.commit()
55
56
57def get_info(data):
58 status = data.get('state', {}).get('status')
59 kpp = data.get('kpp')
60 capital = str(data.get('capital'))
61 management_name = str(data.get('management', {}))
62 management_post = str(data.get('management', {}))
63 founders = str(data.get('founders'))
64 opf_short = str(data.get('opf'))
65 opf_full = str(data.get('opf'))
66 short_name_with_opf = data.get('name', {}).get('short_with_opf')
67 full_name_with_opf = data.get('name', {}).get('full_with_opf')
68 inn = data.get('inn')
69 ogrn = data.get('ogrn')
70 okpo = data.get('okpo')
71 okved = data.get('okved', {})
72 full_adrress = data.get('address')
73 postal_code = data.get('address', {}).get('data', {}).get('postal_code')
74 country = data.get('address', {}).get('data', {}).get('country')
75 federal_district = data.get('address', {}).get('data', {}).get('federal_district')
76 city = data.get('address', {}).get('data', {}).get('city')
77 region = data.get('address', {}).get('data', {}).get('region')
78 region_type_full = str(data.get('address', {}).get('data', {}).get('region_type_full')).title() + " " + region
79 kladr_id = data.get('address', {}).get('data', {}).get('kladr_id')
80 street = data.get('address', {}).get('data', {}).get('street')
81 okato = data.get('address', {}).get('data', {}).get('okato')
82 oktmo = data.get('address', {}).get('data', {}).get('oktmo')
83 # if data:
84 # if data.get('authorities'):
85 # fts_registration = data.get('authorities').get('fts_registration').get('name')
86 # else:
87 # fts_registration = data.get('authorities')
88 timezone = data.get('address', {}).get('data', {}).get('timezone')
89 ogrn_date = datetime.datetime.fromtimestamp(int(data.get('ogrn', {})) / 1000)
90 registration_date = datetime.datetime.fromtimestamp(int(data.get('state', {}).get('registration_date')) / 1000)
91 phone = str(data.get('phones'))
92 email = str(data.get('emails'))
93
94 info = (status, kpp, capital, management_name, management_post, founders, opf_short, opf_full, short_name_with_opf,
95 full_name_with_opf, inn, ogrn, okpo, okved, full_adrress, postal_code, country, federal_district, city,
96 region, region_type_full, kladr_id, street, okato, oktmo, timezone, ogrn_date, registration_date, phone,
97 email)
98 db_info_com(info)
99
100
101async def fetch_content(url, session, OGRN):
102 await asyncio.sleep(0.5)
103 try:
104 async with session.get(url + str(OGRN), allow_redirects=True) as response:
105 data = await response.json()
106 print(OGRN)
107 if data:
108 get_info(data)
109 else:
110 pass
111
112 except aiohttp.client_exceptions.ContentTypeError:
113 pass
114
115
116async def check_ogrn(ogrn):
117 len_ogrn = len(str(ogrn))
118 if len_ogrn not in (13, 15):
119 return False
120
121 async def ogrn_csum(ogrn):
122 if len_ogrn == 13:
123 delimeter = 11
124 else:
125 delimeter = 13
126 return str(int(ogrn[:-1]) % delimeter % 10)
127
128 if await ogrn_csum(ogrn) == ogrn[-1]:
129 return ogrn
130
131
132async def main():
133 tasks = []
134 ORG_Type = "1"
135 year_ = "02"
136 obj_ = "77"
137 nal_ = "00"
138 _start_ogrn = int(str(ORG_Type) + str(year_) + str(obj_) + str(nal_)) * 1000000
139 _end_ogrn = _start_ogrn + 100000
140 async with aiohttp.ClientSession() as session:
141 while _start_ogrn < _end_ogrn:
142 _start_ogrn += 1
143 OGRN = await check_ogrn(str(_start_ogrn))
144 if OGRN:
145 tasks.append(fetch_content(URL, session, OGRN))
146 await asyncio.gather(*tasks)
147
148
149if __name__ == '__main__':
150 t0 = time()
151 db_create()
152 asyncio.run(main())
153 print(time() - t0)
154