Mostly change programm

This commit is contained in:
Noretsa 2024-02-19 13:23:20 +03:00
parent a3055c947b
commit ba742f7d21
15 changed files with 709 additions and 111 deletions

View File

@ -1,6 +1,8 @@
import os import os
import datetime import datetime
import time import time
import json
import pprint
from natsort import natsorted from natsort import natsorted
@ -35,6 +37,7 @@ def complete_task(session, headers, task, address):
# print(prepared_answers) # print(prepared_answers)
ans = {"question_chains": prepared_answers} ans = {"question_chains": prepared_answers}
# print(ans) # print(ans)
# print(task['id'])
session_t = session session_t = session
session_t.headers.update( session_t.headers.update(
{ {

138
classes/kp.py Normal file
View File

@ -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

View File

@ -7,6 +7,7 @@ class Users_dip:
self.path = os.path.join(os.path.abspath('.'), 'data_dip') self.path = os.path.join(os.path.abspath('.'), 'data_dip')
def get_users(self): def get_users(self):
"""Get names from names of folders."""
self.logins = [] self.logins = []
main_dir = os.walk(self.path) main_dir = os.walk(self.path)
for d, dirs, files in main_dir: for d, dirs, files in main_dir:

28
classes/users_kp.py Normal file
View File

@ -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

View File

@ -0,0 +1,4 @@
Курынин Александр Иванович
начальник РЭУ
8(985)574-78-37

Binary file not shown.

View File

@ -0,0 +1 @@
kn8746

Binary file not shown.

Binary file not shown.

26
des.py
View File

@ -1,13 +1,15 @@
import requests
import random
import string
# import json # import json
import datetime import datetime
import time
import os import os
from classes.users import Users import random
import string
import time
import requests
import classes.desinfection as des 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): def get_questions(id_task, session, headers):
@ -119,10 +121,12 @@ def get_task(session, headers):
coord = n['coord'] coord = n['coord']
enterances = n['tasks'] enterances = n['tasks']
for execution in enterances: 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'] name_from_tasks = execution['name']
if name_from_tasks == desinfection: 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]: if address_from_tasks == 'Клин г, ' + addr.replace("_", "/")[:-4] and enterance[-1] == address[-2]:
print('\n') print('\n')
print(name_from_tasks) print(name_from_tasks)
@ -134,14 +138,16 @@ def get_task(session, headers):
'coord': coord 'coord': coord
} }
if name_from_tasks == desinfection: if name_from_tasks == desinfection:
des.assign_task(session, headers, task, address) des.assign_task(
session, headers, task, address)
elif name_from_tasks == proverka: elif name_from_tasks == proverka:
pass pass
# prov.assign_task(session, headers, task, address) # prov.assign_task(session, headers, task, address)
else: else:
pass pass
else: else:
print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") print(
f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}")
# Если адреса не получили выводим ошибку # Если адреса не получили выводим ошибку
else: else:
print(addresses) print(addresses)

View File

@ -1,137 +1,178 @@
import requests
import random
import string
# import json # import json
import datetime import datetime
import time
import os import os
from classes.users import Users import random
import string
import time
import requests
import classes.desinfection as des 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): 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) questions = session.get(url, headers=headers)
json_quest = questions.json() json_quest = questions.json()
return json_quest['selected_chains'] return json_quest["selected_chains"]
def send_image(session, headers, url, photo): def send_image(session, headers, url, photo):
"""Отправляем фото на сервер. Сервер должен вернуть id и url.""" """Отправляем фото на сервер. Сервер должен вернуть id и url."""
files = { files = {
'image': (photo[-5:], open(photo, 'rb')), "image": (photo[-5:], open(photo, "rb")),
} }
# print(files) # 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: if img.status_code == 200:
print(f"Фото {photo} успешно отправлено") print(f"Фото {photo} успешно отправлено")
return img.json() return img.json()
else: else:
print(f"Не удалось загрузить фото на сервер по заданию {url}, статус ошибки {img.status_code}! Повторная попытка!") print(
f"Не удалось загрузить фото на сервер по заданию {url}, статус ошибки {img.status_code}! Повторная попытка!"
)
second_img = send_image(session, headers, url, photo) second_img = send_image(session, headers, url, photo)
return second_img return second_img
def complete_task(session, headers, task, address): def complete_task(session, headers, task, address):
photos = get_photo(address, headers['uid']) photos = get_photo(address, headers["uid"])
if len(photos) > 0: if len(photos) > 0:
photos.sort() photos.sort()
print(task['id']) print(task["id"])
id_task = task['id'] id_task = task["id"]
questions = get_questions(id_task, session, headers) questions = get_questions(id_task, session, headers)
data = [] data = []
for answers in questions: for answers in questions:
answer_chain = { answer_chain = {"id": answers["id"], "questions": []} # answers['questions']
'id': answers['id'], if answer_chain["id"] == 6146: # Цепочка без ответов
'questions': [] # answers['questions']
}
if answer_chain['id'] == 6146: # Цепочка без ответов
continue continue
for components in answers['questions']: for components in answers["questions"]:
comp = [] comp = []
q_c = { q_c = {"id": components["id"], "question_components": []}
'id': components['id'], if q_c["id"] == 6560: # Вопрос без ответа
'question_components': []
}
if q_c['id'] == 6560: # Вопрос без ответа
continue continue
comp.append(q_c) comp.append(q_c)
answer_chain.update({'questions': comp}) answer_chain.update({"questions": comp})
data.append(answer_chain) data.append(answer_chain)
if len(data) == len(photos): if len(data) == len(photos):
for chain in data: for chain in data:
for item in chain['questions']: for item in chain["questions"]:
if len(data) == len(photos): if len(data) == len(photos):
photo_from_photos = 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 # count_send_photo = 0
# while img['id'] is None: # while img['id'] is None:
# count_send_photo += 1 # count_send_photo += 1
# print("Попытка № " + str(count_send_photo) + "отправить фото" + str(photo_from_photos)) # print("Попытка № " + str(count_send_photo) + "отправить фото" + str(photo_from_photos))
# 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))
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) time.sleep(2)
first.update({'end_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())} second = {
"id": 18851,
"answer": {"location": task["coord"]},
"answer_status": None,
"start_time": int(time.time()),
}
time.sleep(2) time.sleep(2)
second.update({'end_time': int(time.time())}) second.update({"end_time": int(time.time())})
item['question_components'].append(first) item["question_components"].append(first)
item['question_components'].append(second) item["question_components"].append(second)
else: 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) 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 # count_send_photo = 0
# while img['id'] is None: # while img['id'] is None:
# count_send_photo += 1 # count_send_photo += 1
# print("Попытка № " + str(count_send_photo) + " отправить фото" + str(photo_from_photos)) # print("Попытка № " + str(count_send_photo) + " отправить фото" + str(photo_from_photos))
# 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))
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) time.sleep(2)
first.update({'end_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())} second = {
"id": 18857,
"answer": [img["id"]],
"answer_status": None,
"start_time": int(time.time()),
}
time.sleep(2) time.sleep(2)
second.update({'end_time': int(time.time())}) second.update({"end_time": int(time.time())})
item['question_components'].append(first) item["question_components"].append(first)
item['question_components'].append(second) item["question_components"].append(second)
ans = {"question_chains": data} ans = {"question_chains": data}
# print(ans) # print(ans)
session_t = session session_t = session
session_t.headers.update( session_t.headers.update(
{ {
'referer': 'https://knd.mosreg.ru/executions'+str(task['id'])+'/solve', "referer": "https://knd.mosreg.ru/executions" + str(task["id"])
'x-platform': 'wb', + "/solve",
'accept': '*/*' "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: if complete.status_code == 200:
print(f'Задание по адресу {address} выполнено успешно!') print(f"Задание по адресу {address} выполнено успешно!")
else: else:
print(f'Задание по адресу {address} не выполненно! Статус ошибки {complete.status_code}') print(
f"Задание по адресу {address} не выполненно! Статус ошибки {complete.status_code}"
)
else: else:
print(f"Несоответствие количества вопросов и количества фотографий по адресу: {address}") print(
f"Несоответствие количества вопросов и количества фотографий по адресу: {address}"
)
# send_execution(task,session, headers) # send_execution(task,session, headers)
def get_photo(address, email): def get_photo(address, email):
photos = [] photos = []
month = datetime.datetime.now().month 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): if not os.path.exists(main_path):
return photos return photos
else: else:
for images in os.listdir(main_path): for images in os.listdir(main_path):
if images.endswith(".jpg") or images.endswith(".jpeg") or images.endswith(".JPG"): if (
photos.append(main_path + '/' + images) images.endswith(".jpg")
or images.endswith(".jpeg")
or images.endswith(".JPG")
):
photos.append(main_path + "/" + images)
return photos return photos
def get_addresses(email): def get_addresses(email):
addresses = [] addresses = []
month = datetime.datetime.now().month 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))) path = os.walk(os.path.join(main_path, email, str(month)))
if not os.path.exists(os.path.join(main_path, email, str(month))): if not os.path.exists(os.path.join(main_path, email, str(month))):
return f"Не найдена папка с месяцем у пользователя {email}! Проверьте структуру каталога!" return f"Не найдена папка с месяцем у пользователя {email}! Проверьте структуру каталога!"
@ -163,18 +204,19 @@ def get_task(session, headers):
2 адрес 2 адрес
3 подъезд 3 подъезд
4 id_задания""" 4 id_задания"""
desinfection = 'Дезинфекция подъездов (МОП)' desinfection = "Дезинфекция подъездов (МОП)"
proverka = 'Систематическая проверка подъездов МКД' proverka = "Систематическая проверка подъездов МКД"
# Получаем адреса # Получаем адреса
addresses = get_addresses(headers['uid']) addresses = get_addresses(headers["uid"])
# Если адреса получили # Если адреса получили
if isinstance(addresses, list): if isinstance(addresses, list):
session_t = session session_t = session
session_t.headers.update( session_t.headers.update(
{'referer': 'https://knd.mosreg.ru/executions', {
'x-platform': 'android', "referer": "https://knd.mosreg.ru/executions",
'accept': '*/*' "x-platform": "android",
} "accept": "*/*",
}
) )
for address in addresses: for address in addresses:
# change '-' for '/' # change '-' for '/'
@ -184,36 +226,48 @@ def get_task(session, headers):
search = addr.replace("_", "/")[:-4] search = addr.replace("_", "/")[:-4]
# print(search) # print(search)
# search = "" # search = ""
data = {'search': search} data = {"search": search}
tasks = session_t.post('https://knd.mosreg.ru//api/v1/executions', tasks = session_t.post(
headers=headers, "https://knd.mosreg.ru//api/v1/executions", headers=headers, data=data
data=data )
)
json_tasks = tasks.json() json_tasks = tasks.json()
get_t = False get_t = False
# Если есть доступное задание с таким адресом # Если есть доступное задание с таким адресом
exec_assigned = json_tasks['executions_assigned'] # Уже полученные задания exec_assigned = json_tasks["executions_assigned"] # Уже полученные задания
exec_available = json_tasks['executions_available'] # Еще не принятые задания exec_available = json_tasks[
"executions_available"
] # Еще не принятые задания
# print(address) # print(address)
if len(exec_available) > 0: if len(exec_available) > 0:
for n in exec_available: for n in exec_available:
coord = n['coord'] coord = n["coord"]
enterances = n['tasks'] enterances = n["tasks"]
for execution in enterances: for execution in enterances:
address_from_tasks = execution['dimensions'][0].get('entity_value_name') address_from_tasks = execution["dimensions"][0].get(
name_from_tasks = execution['name'] "entity_value_name"
)
name_from_tasks = execution["name"]
if name_from_tasks == proverka: if name_from_tasks == proverka:
enterance = execution['dimensions'][2].get('entity_value_name') enterance = execution["dimensions"][2].get(
if address_from_tasks == 'Клин г, '+ addr.replace("_", "/")[:-4] and \ "entity_value_name"
enterance[-1] == address[-2]: )
print('\n') if (
address_from_tasks
== "Клин г, " + addr.replace("_", "/")[:-4]
and enterance[-1] == address[-2]
):
print("\n")
print(name_from_tasks) print(name_from_tasks)
print('\n') print("\n")
task = { task = {
'id': execution['execution_id'], "id": execution["execution_id"],
'address': execution['dimensions'][0].get('entity_value_name'), "address": execution["dimensions"][0].get(
'enterance': execution['dimensions'][2].get('entity_value_name'), "entity_value_name"
'coord': coord ),
"enterance": execution["dimensions"][2].get(
"entity_value_name"
),
"coord": coord,
} }
if name_from_tasks == desinfection: if name_from_tasks == desinfection:
pass pass
@ -223,7 +277,9 @@ def get_task(session, headers):
else: else:
pass pass
else: else:
print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}") print(
f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}"
)
# Если адреса не получили выводим ошибку # Если адреса не получили выводим ошибку
else: else:
print(addresses) print(addresses)
@ -233,18 +289,15 @@ def main():
users = Users() users = Users()
logins = users.get_passwords() logins = users.get_passwords()
if isinstance(logins, list): 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: for user in logins:
session = requests.Session() session = requests.Session()
login = { login = {"email": user["email"], "password": user["password"]}
'email': user['email'],
'password': user['password']
}
response = session.post(url, data=login) response = session.post(url, data=login)
headers = { headers = {
'client': response.headers.get('client'), "client": response.headers.get("client"),
'Access-token': response.headers.get('Access-token'), "Access-token": response.headers.get("Access-token"),
'uid': response.headers.get('uid'), "uid": response.headers.get("uid"),
} }
if response.status_code == 200: if response.status_code == 200:
get_task(session, headers) get_task(session, headers)
@ -263,4 +316,4 @@ if __name__ == "__main__":
def random_string(stringLength): def random_string(stringLength):
letters = string.ascii_letters letters = string.ascii_letters
digits = string.digits 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))

View File

@ -46,6 +46,7 @@ def get_task(session, headers):
proverka = 'Систематическая проверка подъездов МКД' proverka = 'Систематическая проверка подъездов МКД'
naled = 'Проверка образования наледи на кровле' naled = 'Проверка образования наледи на кровле'
dip = 'Осмотр ДИП/ФОП' dip = 'Осмотр ДИП/ФОП'
s = 'ГЖИ. Системная проверка МКД '
# Получаем адреса # Получаем адреса
addresses = get_addresses(headers['uid']) addresses = get_addresses(headers['uid'])
# Если адреса получили # Если адреса получили
@ -79,7 +80,7 @@ def get_task(session, headers):
# Уже полученные задания # Уже полученные задания
print(json_tasks) print(json_tasks)
exec_assigned = json_tasks['executions_assigned'] exec_assigned = json_tasks['executions_assigned']
# print(exec_assigned) print(exec_assigned)
# Еще не принятые задания # Еще не принятые задания
exec_available = json_tasks['executions_available'] exec_available = json_tasks['executions_available']
# print(exec_available) # print(exec_available)
@ -93,7 +94,8 @@ def get_task(session, headers):
address_from_tasks = execution['dimensions'][1].get('entity_value_name') address_from_tasks = execution['dimensions'][1].get('entity_value_name')
print(address_from_tasks) print(address_from_tasks)
name_from_tasks = execution['name'] 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') # enterance = execution['dimensions'][2].get('entity_value_name')
if address_from_tasks == 'г. Клин, ' + addr.replace("_", "/"): if address_from_tasks == 'г. Клин, ' + addr.replace("_", "/"):
print('\n') print('\n')
@ -114,6 +116,9 @@ def get_task(session, headers):
pass pass
# led.assign_task(session, headers, task, address) # led.assign_task(session, headers, task, address)
elif name_from_tasks == dip: 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) osmotr_dip.assign_task(session, headers, task, address)
else: else:
pass pass

162
knd_dip2.py Normal file
View File

@ -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")

195
knd_kp.py Normal file
View File

@ -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")

View File

@ -1,15 +1,17 @@
import requests # import random
import random # import string
import string
# import json # import json
import datetime # import datetime
import time # import time
import os 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 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): def get_addresses(email):