diff --git a/classes/dip.py b/classes/dip.py index fdb5800..4850b4d 100644 --- a/classes/dip.py +++ b/classes/dip.py @@ -1,6 +1,8 @@ import os import datetime import time +import json +import pprint from natsort import natsorted @@ -35,6 +37,7 @@ def complete_task(session, headers, task, address): # print(prepared_answers) ans = {"question_chains": prepared_answers} # print(ans) + # print(task['id']) session_t = session session_t.headers.update( { diff --git a/classes/kp.py b/classes/kp.py new file mode 100644 index 0000000..bab1364 --- /dev/null +++ b/classes/kp.py @@ -0,0 +1,138 @@ +import os +import datetime +import time +import json +import pprint +from natsort import natsorted + + +def assign_task(session, headers, task): + # print('assign_task') + address = task['address'] + url = 'https://knd.mosreg.ru//api/v1/executions/'+str(task['id'])+'/assign' + task_assign = session.put(url, headers=headers) + if task_assign.status_code == 200: + print(f'Получили задание по адресу: {address}') + complete_task(session, headers, task, address) + else: + print(f"Не смогли получить задание {address} {task['id']}!") + + +def complete_task(session, headers, task, address): + photos = get_photo(address, headers['uid']) + if len(photos) > 0: + # photos.sort() + photos = natsorted(photos) + else: + print(len(photos)) + """В папке лежит фото графика, которое отправляется из модуля des, поэтому убираем отсюда""" + # if len(photos) == 11 or len(photos) == 13: + # photos.pop() + id_task = task['id'] + quest = get_questions(id_task, session, headers) + # print(quest) + # length_question = get_length_questions(quest) + prepared_answers = [] + if True: + prepared_answers = prepare_answer(quest, photos, session, task, headers) + # print(prepared_answers) + ans = {"question_chains": prepared_answers} + # print(ans) + # print(task['id']) + session_t = session + session_t.headers.update( + { + 'referer': 'https://knd.mosreg.ru/executions'+str(task['id'])+'/solve', + 'x-platform': 'android', + 'accept': '*/*' + } + ) + complete = session_t.post('https://knd.mosreg.ru//api/v1/executions/'+str(task['id'])+'/answers', headers=headers, json=ans) + if complete.status_code == 200: + print(f'Задание по адресу {address} выполнено успешно!\n\n') + else: + print(f'Задание по адресу {address} не выполненно! Статус ошибки {complete.status_code}\n\n') + else: + print(f"\n\n\nНесоответствие количества вопросов и фотографий по адресу {address}!!! \ + Необходимо проверить!!!\n\n\n") + # print(len(quest)) 9 and 13 + + +def get_photo(address, email): + photos = [] + # month = datetime.datetime.now().month + main_path = os.path.join(os.path.abspath('.'), 'data_kp', email) + if not os.path.exists(main_path): + return photos + else: + for images in os.listdir(main_path): + if images.endswith(".jpg") or images.endswith(".jpeg") or images.endswith(".JPG"): + photos.append(main_path + '/' + images) + return photos + + +def get_questions(id_task, session, headers): + url = 'https://knd.mosreg.ru//api/v1/executions/'+str(id_task)+'/questions' + questions = session.get(url, headers=headers) + json_quest = questions.json() + return json_quest['question_chains'] + + +def prepare_answer(quest, photos, session, task, headers): + questions = [] + question_components= [] + question_chains = [] + for main_chain in quest: + for second_chain in main_chain['questions']: + for third_chain in second_chain['question_components']: + question_type = third_chain['type'] + if question_type == 'list': + data = {"id": third_chain['id'], "answer": 888, "start_time": int(time.time())} + time.sleep(2) + data.update({"end_time": int(time.time())}) + question_components.append(data) + elif question_type == "geo": + data = {"id": third_chain['id'], "answer": {"location": task['coord']}, "start_time": int(time.time())} + time.sleep(2) + data.update({"end_time": int(time.time())}) + question_components.append(data) + elif question_type == "gallery": + images = [] + for image in photos: + img = send_image(session, headers, task['id'], image) + images.append(img['id']) + data = {"id": third_chain['id'], "answer": images, + "start_time": int(time.time())} + time.sleep(2) + data.update({"end_time": int(time.time())}) + question_components.append(data) + if len(question_components) > 0: + main_data = { + "id": second_chain['id'], + "question_components": question_components + } + questions.append(main_data) + question_components = [] + if len(questions) > 0: + q_dict = { + "id": main_chain['id'], + "questions": questions + } + question_chains.append(q_dict) + questions = [] + return question_chains + + +def send_image(session, headers, url, photo): + """Отправляем фото на сервер. Сервер должен вернуть id и url.""" + files = { + 'image': (photo[-5:], open(photo, 'rb')), + } + img = session.post('https://knd.mosreg.ru//api/v1/executions/'+str(url)+'/images', headers=headers, files=files) + if img.status_code == 200: + print(f"Фото {photo} успешно отправлено") + return img.json() + else: + print(f"Не удалось загрузить фото на сервер по заданию {url}, статус ошибки {img.status_code}! Повторная попытка!") + second_img = send_image(session, headers, url, photo) + return second_img diff --git a/classes/users_dip.py b/classes/users_dip.py index 6b32e2d..d335db7 100644 --- a/classes/users_dip.py +++ b/classes/users_dip.py @@ -7,6 +7,7 @@ class Users_dip: self.path = os.path.join(os.path.abspath('.'), 'data_dip') def get_users(self): + """Get names from names of folders.""" self.logins = [] main_dir = os.walk(self.path) for d, dirs, files in main_dir: diff --git a/classes/users_kp.py b/classes/users_kp.py new file mode 100644 index 0000000..cf193c4 --- /dev/null +++ b/classes/users_kp.py @@ -0,0 +1,28 @@ +import os + + +class Users_kp: + def __init__(self): + self.data = [] + self.path = os.path.join(os.path.abspath('.'), 'data_kp') + + def get_users(self): + """Get names from names of folders.""" + self.logins = [] + main_dir = os.walk(self.path) + for d, dirs, files in main_dir: + self.logins.append(dirs) + return self.logins[0] + + def get_passwords(self): + if not os.path.exists(self.path): + return "Папка data_led не существует. Создайте папку с необходимыми параметрами и запустите программу снова!" + self.emails = self.get_users() + if len(self.emails) > 0: + for user in self.emails: + with open(os.path.join(self.path, user, 'pass.txt'), 'r') as f: + log_pass = {'email': user, 'password': f.readline().split('\n')[0]} + self.data.append(log_pass) + else: + return "Нет ни одного пользователя! Заполните папку и запустите программу снова!" + return self.data diff --git a/data/5020051404_1@check.mo/img_5.txt b/data/5020051404_1@check.mo/img_5.txt new file mode 100644 index 0000000..0437f7c --- /dev/null +++ b/data/5020051404_1@check.mo/img_5.txt @@ -0,0 +1,4 @@ + + +8(985)574-78-37 + diff --git a/data/5020051404_1@check.mo/new_template.docx b/data/5020051404_1@check.mo/new_template.docx new file mode 100644 index 0000000..ecf5c8b Binary files /dev/null and b/data/5020051404_1@check.mo/new_template.docx differ diff --git a/data/5020051404_1@check.mo/pass.txt b/data/5020051404_1@check.mo/pass.txt new file mode 100644 index 0000000..82452c1 --- /dev/null +++ b/data/5020051404_1@check.mo/pass.txt @@ -0,0 +1 @@ +kn8746 \ No newline at end of file diff --git a/data/5020051404_1@check.mo/template.docx b/data/5020051404_1@check.mo/template.docx new file mode 100644 index 0000000..54f4925 Binary files /dev/null and b/data/5020051404_1@check.mo/template.docx differ diff --git a/data/5020051404_1@check.mo/template_lift.docx b/data/5020051404_1@check.mo/template_lift.docx new file mode 100644 index 0000000..1cdf66b Binary files /dev/null and b/data/5020051404_1@check.mo/template_lift.docx differ diff --git a/des.py b/des.py index 521c3eb..3604fc7 100644 --- a/des.py +++ b/des.py @@ -1,13 +1,15 @@ -import requests -import random -import string # import json import datetime -import time import os -from classes.users import Users +import random +import string +import time + +import requests + import classes.desinfection as des -import classes.proverka as prov +# import classes.proverka as prov +from classes.users import Users def get_questions(id_task, session, headers): @@ -119,10 +121,12 @@ def get_task(session, headers): coord = n['coord'] enterances = n['tasks'] for execution in enterances: - address_from_tasks = execution['dimensions'][0].get('entity_value_name') + address_from_tasks = execution['dimensions'][0].get( + 'entity_value_name') name_from_tasks = execution['name'] if name_from_tasks == desinfection: - enterance = execution['dimensions'][2].get('entity_value_name') + enterance = execution['dimensions'][2].get( + 'entity_value_name') if address_from_tasks == 'Клин г, ' + addr.replace("_", "/")[:-4] and enterance[-1] == address[-2]: print('\n') print(name_from_tasks) @@ -134,14 +138,16 @@ def get_task(session, headers): 'coord': coord } if name_from_tasks == desinfection: - des.assign_task(session, headers, task, address) + des.assign_task( + session, headers, task, address) elif name_from_tasks == proverka: pass # prov.assign_task(session, headers, task, address) else: pass else: - print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") + print( + f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") # Если адреса не получили выводим ошибку else: print(addresses) diff --git a/knd_bot.py b/knd_bot.py index c2c3f95..4af4be1 100644 --- a/knd_bot.py +++ b/knd_bot.py @@ -1,137 +1,178 @@ -import requests -import random -import string # import json import datetime -import time import os -from classes.users import Users +import random +import string +import time + +import requests + import classes.desinfection as des import classes.proverka as prov +from classes.users import Users def get_questions(id_task, session, headers): - url = 'https://knd.mosreg.ru//api/v1/executions/'+str(id_task)+'/questions' + url = "https://knd.mosreg.ru//api/v1/executions/" + str(id_task) + "/questions" questions = session.get(url, headers=headers) json_quest = questions.json() - return json_quest['selected_chains'] + return json_quest["selected_chains"] def send_image(session, headers, url, photo): """Отправляем фото на сервер. Сервер должен вернуть id и url.""" files = { - 'image': (photo[-5:], open(photo, 'rb')), + "image": (photo[-5:], open(photo, "rb")), } # print(files) - img = session.post('https://knd.mosreg.ru//api/v1/executions/'+str(url)+'/images', headers=headers, files=files) + img = session.post( + "https://knd.mosreg.ru//api/v1/executions/" + str(url) + "/images", + headers=headers, + files=files, + ) if img.status_code == 200: print(f"Фото {photo} успешно отправлено") return img.json() else: - print(f"Не удалось загрузить фото на сервер по заданию {url}, статус ошибки {img.status_code}! Повторная попытка!") + print( + f"Не удалось загрузить фото на сервер по заданию {url}, статус ошибки {img.status_code}! Повторная попытка!" + ) second_img = send_image(session, headers, url, photo) return second_img def complete_task(session, headers, task, address): - photos = get_photo(address, headers['uid']) + photos = get_photo(address, headers["uid"]) if len(photos) > 0: photos.sort() - print(task['id']) - id_task = task['id'] + print(task["id"]) + id_task = task["id"] questions = get_questions(id_task, session, headers) data = [] for answers in questions: - answer_chain = { - 'id': answers['id'], - 'questions': [] # answers['questions'] - } - if answer_chain['id'] == 6146: # Цепочка без ответов + answer_chain = {"id": answers["id"], "questions": []} # answers['questions'] + if answer_chain["id"] == 6146: # Цепочка без ответов continue - for components in answers['questions']: + for components in answers["questions"]: comp = [] - q_c = { - 'id': components['id'], - 'question_components': [] - } - if q_c['id'] == 6560: # Вопрос без ответа + q_c = {"id": components["id"], "question_components": []} + if q_c["id"] == 6560: # Вопрос без ответа continue comp.append(q_c) - answer_chain.update({'questions': comp}) + answer_chain.update({"questions": comp}) data.append(answer_chain) if len(data) == len(photos): for chain in data: - for item in chain['questions']: + for item in chain["questions"]: if len(data) == len(photos): photo_from_photos = photos.pop(0) - img = send_image(session, headers, task['id'], photo_from_photos) # photos.pop(0)) + img = send_image( + session, headers, task["id"], photo_from_photos + ) # photos.pop(0)) # count_send_photo = 0 # while img['id'] is None: # count_send_photo += 1 # print("Попытка № " + str(count_send_photo) + "отправить фото" + str(photo_from_photos)) # img = send_image(session, headers, task['id'], photo_from_photos)#photos.pop(0)) - first = {"id": 18850, "answer": [img['id']], 'answer_status': None, 'start_time': int(time.time())} + first = { + "id": 18850, + "answer": [img["id"]], + "answer_status": None, + "start_time": int(time.time()), + } time.sleep(2) - first.update({'end_time': int(time.time())}) - second = {"id": 18851, "answer": {"location": task['coord']}, 'answer_status': None, 'start_time': int(time.time())} + first.update({"end_time": int(time.time())}) + second = { + "id": 18851, + "answer": {"location": task["coord"]}, + "answer_status": None, + "start_time": int(time.time()), + } time.sleep(2) - second.update({'end_time': int(time.time())}) - item['question_components'].append(first) - item['question_components'].append(second) + second.update({"end_time": int(time.time())}) + item["question_components"].append(first) + item["question_components"].append(second) else: - #img = send_image(session, headers, task['id'], photos.pop(0)) + # img = send_image(session, headers, task['id'], photos.pop(0)) photo_from_photos = photos.pop(0) - img = send_image(session, headers, task['id'], photo_from_photos)#photos.pop(0)) + img = send_image( + session, headers, task["id"], photo_from_photos + ) # photos.pop(0)) # count_send_photo = 0 # while img['id'] is None: # count_send_photo += 1 # print("Попытка № " + str(count_send_photo) + " отправить фото" + str(photo_from_photos)) # img = send_image(session, headers, task['id'], photo_from_photos)#photos.pop(0)) - first = {"id": 18856, "answer": 77, 'answer_status': None, 'start_time': int(time.time())} + first = { + "id": 18856, + "answer": 77, + "answer_status": None, + "start_time": int(time.time()), + } time.sleep(2) - first.update({'end_time': int(time.time())}) - second = {"id": 18857, "answer": [img['id']], 'answer_status': None, 'start_time': int(time.time())} + first.update({"end_time": int(time.time())}) + second = { + "id": 18857, + "answer": [img["id"]], + "answer_status": None, + "start_time": int(time.time()), + } time.sleep(2) - second.update({'end_time': int(time.time())}) - item['question_components'].append(first) - item['question_components'].append(second) + second.update({"end_time": int(time.time())}) + item["question_components"].append(first) + item["question_components"].append(second) ans = {"question_chains": data} # print(ans) session_t = session session_t.headers.update( { - 'referer': 'https://knd.mosreg.ru/executions'+str(task['id'])+'/solve', - 'x-platform': 'wb', - 'accept': '*/*' - } + "referer": "https://knd.mosreg.ru/executions" + str(task["id"]) + + "/solve", + "x-platform": "wb", + "accept": "*/*", + } + ) + complete = session_t.post( + "https://knd.mosreg.ru//api/v1/executions/" + str(task["id"]) + "/answers", + headers=headers, + json=ans, ) - complete = session_t.post('https://knd.mosreg.ru//api/v1/executions/'+str(task['id'])+'/answers', headers=headers, json=ans) if complete.status_code == 200: - print(f'Задание по адресу {address} выполнено успешно!') + print(f"Задание по адресу {address} выполнено успешно!") else: - print(f'Задание по адресу {address} не выполненно! Статус ошибки {complete.status_code}') + print( + f"Задание по адресу {address} не выполненно! Статус ошибки {complete.status_code}" + ) else: - print(f"Несоответствие количества вопросов и количества фотографий по адресу: {address}") + print( + f"Несоответствие количества вопросов и количества фотографий по адресу: {address}" + ) + + # send_execution(task,session, headers) def get_photo(address, email): photos = [] month = datetime.datetime.now().month - main_path = os.path.join(os.path.abspath('.'), 'data', email, str(month), address) + main_path = os.path.join(os.path.abspath("."), "data", email, str(month), address) if not os.path.exists(main_path): return photos else: for images in os.listdir(main_path): - if images.endswith(".jpg") or images.endswith(".jpeg") or images.endswith(".JPG"): - photos.append(main_path + '/' + images) + if ( + images.endswith(".jpg") + or images.endswith(".jpeg") + or images.endswith(".JPG") + ): + photos.append(main_path + "/" + images) return photos def get_addresses(email): addresses = [] month = datetime.datetime.now().month - main_path = os.path.join(os.path.abspath('.'), 'data') + main_path = os.path.join(os.path.abspath("."), "data") path = os.walk(os.path.join(main_path, email, str(month))) if not os.path.exists(os.path.join(main_path, email, str(month))): return f"Не найдена папка с месяцем у пользователя {email}! Проверьте структуру каталога!" @@ -163,18 +204,19 @@ def get_task(session, headers): 2 адрес 3 подъезд 4 id_задания""" - desinfection = 'Дезинфекция подъездов (МОП)' - proverka = 'Систематическая проверка подъездов МКД' + desinfection = "Дезинфекция подъездов (МОП)" + proverka = "Систематическая проверка подъездов МКД" # Получаем адреса - addresses = get_addresses(headers['uid']) + addresses = get_addresses(headers["uid"]) # Если адреса получили if isinstance(addresses, list): session_t = session session_t.headers.update( - {'referer': 'https://knd.mosreg.ru/executions', - 'x-platform': 'android', - 'accept': '*/*' - } + { + "referer": "https://knd.mosreg.ru/executions", + "x-platform": "android", + "accept": "*/*", + } ) for address in addresses: # change '-' for '/' @@ -184,36 +226,48 @@ def get_task(session, headers): search = addr.replace("_", "/")[:-4] # print(search) # search = "" - data = {'search': search} - tasks = session_t.post('https://knd.mosreg.ru//api/v1/executions', - headers=headers, - data=data - ) + data = {"search": search} + tasks = session_t.post( + "https://knd.mosreg.ru//api/v1/executions", headers=headers, data=data + ) json_tasks = tasks.json() get_t = False # Если есть доступное задание с таким адресом - exec_assigned = json_tasks['executions_assigned'] # Уже полученные задания - exec_available = json_tasks['executions_available'] # Еще не принятые задания + exec_assigned = json_tasks["executions_assigned"] # Уже полученные задания + exec_available = json_tasks[ + "executions_available" + ] # Еще не принятые задания # print(address) if len(exec_available) > 0: for n in exec_available: - coord = n['coord'] - enterances = n['tasks'] + coord = n["coord"] + enterances = n["tasks"] for execution in enterances: - address_from_tasks = execution['dimensions'][0].get('entity_value_name') - name_from_tasks = execution['name'] + address_from_tasks = execution["dimensions"][0].get( + "entity_value_name" + ) + name_from_tasks = execution["name"] if name_from_tasks == proverka: - enterance = execution['dimensions'][2].get('entity_value_name') - if address_from_tasks == 'Клин г, '+ addr.replace("_", "/")[:-4] and \ - enterance[-1] == address[-2]: - print('\n') + enterance = execution["dimensions"][2].get( + "entity_value_name" + ) + if ( + address_from_tasks + == "Клин г, " + addr.replace("_", "/")[:-4] + and enterance[-1] == address[-2] + ): + print("\n") print(name_from_tasks) - print('\n') + print("\n") task = { - 'id': execution['execution_id'], - 'address': execution['dimensions'][0].get('entity_value_name'), - 'enterance': execution['dimensions'][2].get('entity_value_name'), - 'coord': coord + "id": execution["execution_id"], + "address": execution["dimensions"][0].get( + "entity_value_name" + ), + "enterance": execution["dimensions"][2].get( + "entity_value_name" + ), + "coord": coord, } if name_from_tasks == desinfection: pass @@ -223,7 +277,9 @@ def get_task(session, headers): else: pass else: - print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") + print( + f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}" + ) # Если адреса не получили выводим ошибку else: print(addresses) @@ -233,18 +289,15 @@ def main(): users = Users() logins = users.get_passwords() if isinstance(logins, list): - url = 'https://knd.mosreg.ru//api/v1/auth/sign_in' + url = "https://knd.mosreg.ru//api/v1/auth/sign_in" for user in logins: session = requests.Session() - login = { - 'email': user['email'], - 'password': user['password'] - } + login = {"email": user["email"], "password": user["password"]} response = session.post(url, data=login) headers = { - 'client': response.headers.get('client'), - 'Access-token': response.headers.get('Access-token'), - 'uid': response.headers.get('uid'), + "client": response.headers.get("client"), + "Access-token": response.headers.get("Access-token"), + "uid": response.headers.get("uid"), } if response.status_code == 200: get_task(session, headers) @@ -263,4 +316,4 @@ if __name__ == "__main__": def random_string(stringLength): letters = string.ascii_letters digits = string.digits - return ''.join(random.choice(letters+digits) for i in range(stringLength)) + return "".join(random.choice(letters + digits) for i in range(stringLength)) diff --git a/knd_dip.py b/knd_dip.py index 3c9de0c..7bdf0fa 100644 --- a/knd_dip.py +++ b/knd_dip.py @@ -46,6 +46,7 @@ def get_task(session, headers): proverka = 'Систематическая проверка подъездов МКД' naled = 'Проверка образования наледи на кровле' dip = 'Осмотр ДИП/ФОП' + s = 'ГЖИ. Системная проверка МКД ' # Получаем адреса addresses = get_addresses(headers['uid']) # Если адреса получили @@ -79,7 +80,7 @@ def get_task(session, headers): # Уже полученные задания print(json_tasks) exec_assigned = json_tasks['executions_assigned'] - # print(exec_assigned) + print(exec_assigned) # Еще не принятые задания exec_available = json_tasks['executions_available'] # print(exec_available) @@ -93,7 +94,8 @@ def get_task(session, headers): address_from_tasks = execution['dimensions'][1].get('entity_value_name') print(address_from_tasks) name_from_tasks = execution['name'] - if name_from_tasks == dip: + # if name_from_tasks == dip: + if name_from_tasks == s: # enterance = execution['dimensions'][2].get('entity_value_name') if address_from_tasks == 'г. Клин, ' + addr.replace("_", "/"): print('\n') @@ -114,6 +116,9 @@ def get_task(session, headers): pass # led.assign_task(session, headers, task, address) elif name_from_tasks == dip: + # osmotr_dip.assign_task(session, headers, task, address) + pass + elif name_from_tasks == s: osmotr_dip.assign_task(session, headers, task, address) else: pass diff --git a/knd_dip2.py b/knd_dip2.py new file mode 100644 index 0000000..26eab8f --- /dev/null +++ b/knd_dip2.py @@ -0,0 +1,162 @@ +import requests +import random +import string +# import json +import datetime +import time +import os +from classes.users import Users +from classes.users_led import Users_led +from classes.users_dip import Users_dip +import classes.desinfection as des +import classes.proverka as prov +import classes.led as led +import classes.dip as osmotr_dip + + +def get_addresses(email): + addresses = [] + # month = datetime.datetime.now().month + main_path = os.path.join(os.path.abspath('.'), 'data_dip') + path = os.walk(os.path.join(main_path, email)) + # if not os.path.exists(os.path.join(main_path, email, str(month))): + # return f"Не найдена папка с месяцем у пользователя {email}! Проверьте \ + # структуру каталога!" + # print(path) + for d, dirs, files in path: + addresses.append(dirs) + if len(addresses[0]) > 0: + return addresses[0] + else: + return f"Ни одного адреса для пользователя {email} не найдено! \ + Добавьте фото и запустите программу снова!" + + +def get_task(session, headers): + """Получаем все доступные задания. Если в переменную search добавить адрес, + то будет искать этот адрес. Он попадет в + json_tasks['executions_available'], + так что надо понять откуда берем задания. Отсюда можно возвращать + все параметры задания: + 1 координаты + 2 адрес + 3 подъезд + 4 id_задания""" + desinfection = 'Дезинфекция подъездов (МОП)' + proverka = 'Систематическая проверка подъездов МКД' + naled = 'Проверка образования наледи на кровле' + dip = 'Осмотр ДИП/ФОП' + s = 'ГЖИ. Системная проверка МКД' + # Получаем адреса + addresses = get_addresses(headers['uid']) + # Если адреса получили + # if isinstance(addresses, list): + session_t = session + session_t.headers.update( + {'referer': 'https://knd.mosreg.ru/executions', + 'x-platform': 'android', + 'accept': '*/*' + } + ) + for address in addresses: + # change '-' for '/' + # need split enterance from address + addr = address.replace("Чаиковского", "Чайковского") + addr = address.replace("Маиданово", "Майданово") + addr = address.replace("Молодежныи", "Молодежный") + addr = addr.replace("Ломоносовскии", "Ломоносовский") + search = addr.replace("_", "/") + # print(search) + data = {'search': search} + tasks = session_t.post('https://knd.mosreg.ru//api/v1/actor/executions', + headers=headers + # data=data + ) + json_tasks = tasks.json() + # print(json_tasks) + # get_t = False + # Если есть доступное задание с таким адресом + # + # Уже полученные задания + # print(json_tasks) + exec_assigned = json_tasks['executions_assigned'] + # print(exec_assigned) + # Еще не принятые задания + exec_available = json_tasks['executions_available'] + # print(exec_available) + # print(address) + if len(exec_assigned) > 0: + # print(len(exec_assigned)) + for n in exec_assigned: + coord = n['coord'] + enterances = n['tasks'] + for execution in enterances: + address_from_tasks = execution['dimensions'][1].get('entity_value_name') + # print(address_from_tasks) + name_from_tasks = execution['name'] + # if name_from_tasks == dip: + # if name_from_tasks == s: + # # enterance = execution['dimensions'][2].get('entity_value_name') + # if address_from_tasks == 'г. Клин, ' + addr.replace("_", "/"): + # print('\n') + # print(name_from_tasks) + # print('\n') + task = { + 'id': execution['execution_id'], + 'address': execution['dimensions'][1].get('entity_value_name'), + 'coord': coord + } + # if name_from_tasks == desinfection: + # # des.assign_task(session, headers, task, address) + # pass + # elif name_from_tasks == proverka: + # pass + # # prov.assign_task(session, headers, task, address) + # elif name_from_tasks == naled: + # pass + # # led.assign_task(session, headers, task, address) + # elif name_from_tasks == dip: + osmotr_dip.assign_task(session, headers, task, address) + # pass + # # elif name_from_tasks == s: + # # osmotr_dip.assign_task(session, headers, task, address) + # else: + # pass + # else: + # print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") + # Если адреса не получили выводим ошибку + # else: + # print(addresses) + + +def main(): + users = Users_dip() + logins = users.get_passwords() + if isinstance(logins, list): + url = 'https://knd.mosreg.ru//api/v1/auth/sign_in' + for user in logins: + session = requests.Session() + login = { + 'email': user['email'], + 'password': user['password'] + } + response = session.post(url, data=login) + headers = { + 'client': response.headers.get('client'), + 'Access-token': response.headers.get('Access-token'), + 'uid': response.headers.get('uid'), + } + if response.status_code == 200: + print(f"Пользователь {user['email']} успешно авторизовался!") + # print(response.headers) + get_task(session, headers) + else: + print(f"Отказ в авторизации для пользователя {user['email']}!") + time.sleep(1) + else: + print(users.get_passwords()) + + +if __name__ == "__main__": + main() + k = input("Press ENTER for exit") diff --git a/knd_kp.py b/knd_kp.py new file mode 100644 index 0000000..ef143de --- /dev/null +++ b/knd_kp.py @@ -0,0 +1,195 @@ +import requests +import random +import string +# import json +import datetime +import time +import os +# from classes.users import Users +# from classes.users_led import Users_led +# from classes.users_dip import Users_dip +from classes.users_kp import Users_kp +import classes.kp as kp +# import classes.desinfection as des +# import classes.proverka as prov +# import classes.led as led +# import classes.dip as osmotr_dip + + +def get_addresses(email): + addresses = [] + # month = datetime.datetime.now().month + main_path = os.path.join(os.path.abspath('.'), 'data_dip') + path = os.walk(os.path.join(main_path, email)) + # if not os.path.exists(os.path.join(main_path, email, str(month))): + # return f"Не найдена папка с месяцем у пользователя {email}! Проверьте \ + # структуру каталога!" + # print(path) + for d, dirs, files in path: + addresses.append(dirs) + if len(addresses[0]) > 0: + return addresses[0] + else: + return f"Ни одного адреса для пользователя {email} не найдено! \ + Добавьте фото и запустите программу снова!" + + +def get_task(session, headers): + """Получаем все доступные задания. Если в переменную search добавить адрес, + то будет искать этот адрес. Он попадет в + json_tasks['executions_available'], + так что надо понять откуда берем задания. Отсюда можно возвращать + все параметры задания: + 1 координаты + 2 адрес + 3 подъезд + 4 id_задания""" + # desinfection = 'Дезинфекция подъездов (МОП)' + # proverka = 'Систематическая проверка подъездов МКД' + # naled = 'Проверка образования наледи на кровле' + # dip = 'Осмотр ДИП/ФОП' + # s = 'ГЖИ. Системная проверка МКД ' + session_t = session + session_t.headers.update( + {'referer': 'https://knd.mosreg.ru/executions', + 'x-platform': 'android', + 'accept': '*/*' + } + ) + tasks = session_t.post('https://knd.mosreg.ru//api/v1/executions', + headers=headers + ) + json_tasks = tasks.json() + # print(json_tasks) + + exec_assigned = json_tasks['executions_assigned'] + + if len(exec_assigned) > 0: + for execution in exec_assigned: + coord = execution['coord'] + tasks = execution['tasks'] + for task in tasks: + task_name = task['name'] + print(task_name) + access_task = { + 'id': task['execution_id'], + 'address': task['dimensions'][1].get('entity_value_name'), + 'coord': coord + } + kp.assign_task(session, headers, access_task) + else: + print(f"Нет доступных заданий для пользователя {headers['uid']}!") + + # Получаем адреса + # addresses = get_addresses(headers['uid']) + # # Если адреса получили + # if isinstance(addresses, list): + # session_t = session + # session_t.headers.update( + # {'referer': 'https://knd.mosreg.ru/executions', + # 'x-platform': 'android', + # 'accept': '*/*' + # } + # ) + # for address in addresses: + # # change '-' for '/' + # # need split enterance from address + # addr = address.replace("Чаиковского", "Чайковского") + # addr = address.replace("Маиданово", "Майданово") + # addr = address.replace("Молодежныи", "Молодежный") + # addr = addr.replace("Ломоносовскии", "Ломоносовский") + # search = addr.replace("_", "/") + # # print(search) + # data = {'search': search} + # tasks = session_t.post('https://knd.mosreg.ru//api/v1/actor/executions', + # headers=headers, + # data=data + # ) + # json_tasks = tasks.json() + # # print(json_tasks) + # # get_t = False + # # Если есть доступное задание с таким адресом + # # + # # Уже полученные задания + # print(json_tasks) + # exec_assigned = json_tasks['executions_assigned'] + # print(exec_assigned) + # # Еще не принятые задания + # exec_available = json_tasks['executions_available'] + # # print(exec_available) + # # print(address) + # if len(exec_assigned) > 0: + # # print(len(exec_assigned)) + # for n in exec_assigned: + # coord = n['coord'] + # enterances = n['tasks'] + # for execution in enterances: + # address_from_tasks = execution['dimensions'][1].get('entity_value_name') + # print(address_from_tasks) + # name_from_tasks = execution['name'] + # # if name_from_tasks == dip: + # if name_from_tasks == s: + # # enterance = execution['dimensions'][2].get('entity_value_name') + # if address_from_tasks == 'г. Клин, ' + addr.replace("_", "/"): + # print('\n') + # print(name_from_tasks) + # print('\n') + # task = { + # 'id': execution['execution_id'], + # 'address': execution['dimensions'][1].get('entity_value_name'), + # 'coord': coord + # } + # if name_from_tasks == desinfection: + # # des.assign_task(session, headers, task, address) + # pass + # elif name_from_tasks == proverka: + # pass + # # prov.assign_task(session, headers, task, address) + # elif name_from_tasks == naled: + # pass + # # led.assign_task(session, headers, task, address) + # elif name_from_tasks == dip: + # # osmotr_dip.assign_task(session, headers, task, address) + # pass + # elif name_from_tasks == s: + # osmotr_dip.assign_task(session, headers, task, address) + # else: + # pass + # else: + # print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") + # # Если адреса не получили выводим ошибку + # else: + # print(addresses) + + +def main(): + users = Users_kp() + logins = users.get_passwords() + if isinstance(logins, list): + url = 'https://knd.mosreg.ru//api/v1/auth/sign_in' + for user in logins: + session = requests.Session() + login = { + 'email': user['email'], + 'password': user['password'] + } + response = session.post(url, data=login) + headers = { + 'client': response.headers.get('client'), + 'Access-token': response.headers.get('Access-token'), + 'uid': response.headers.get('uid'), + } + if response.status_code == 200: + print(f"Пользователь {user['email']} успешно авторизовался!") + # print(response.headers) + get_task(session, headers) + else: + print(f"Отказ в авторизации для пользователя {user['email']}!") + time.sleep(1) + else: + print(users.get_passwords()) + + +if __name__ == "__main__": + main() + k = input("Press ENTER for exit") diff --git a/naled.py b/naled.py index 3fff887..60ddbca 100644 --- a/naled.py +++ b/naled.py @@ -1,15 +1,17 @@ -import requests -import random -import string +# import random +# import string # import json -import datetime -import time +# import datetime +# import time import os -from classes.users import Users + +import requests + +# import classes.desinfection as des +# import classes.led as led +# import classes.proverka as prov +# from classes.users import Users from classes.users_led import Users_led -import classes.desinfection as des -import classes.proverka as prov -import classes.led as led def get_addresses(email):