knd_klinteplo/knd_bot.py

202 lines
8.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import random
import string
import json
import datetime
import time
import os
from classes.users import Users
# anwer_text = '{"question_chains":[{"id":6145,"questions":[{"id":6559,"question_components":[{"id":18850,"answer":[80634165],"answer_status":null,"end_time":1591866979,"start_time":1591866978},{"id":18851,"answer":{"location":[56.439337,36.557897]},"answer_status":null,"start_time":1591866873,"end_time":1591867165},{"id":18852,"answer":"1","answer_status":null,"start_time":1591867063,"end_time":1591867063}]}]},{"id":6147,"questions":[{"id":6561,"question_components":[{"id":18856,"answer":77,"answer_status":null,"end_time":1591867067,"start_time":1591867067},{"id":18857,"answer":[80639138],"answer_status":null,"end_time":1591867186,"start_time":1591867185}]}]},{"id":6147,"questions":[{"id":6561,"question_components":[{"id":18856,"answer":77,"answer_status":null,"end_time":1591867200,"start_time":1591867200},{"id":18857,"answer":[80639640],"answer_status":null,"end_time":1591867206,"start_time":1591867205}]}]},{"id":6147,"questions":[{"id":6561,"question_components":[{"id":18856,"answer":77,"answer_status":null,"end_time":1591867211,"start_time":1591867211},{"id":18857,"answer":[80640010],"answer_status":null,"end_time":1591867220,"start_time":1591867219}]}]},{"id":6147,"questions":[{"id":6561,"question_components":[{"id":18856,"answer":77,"answer_status":null,"end_time":1591867223,"start_time":1591867223},{"id":18857,"answer":[80640333],"answer_status":null,"end_time":1591867233,"start_time":1591867232}]}]}]}'
# question_text = ''
def get_enterance_and_coord(session, headers, execution_id):
photo_id = send_image(session, headers, execution_id)
pass
def send_execution(task, session, headers):
# answers_for_data = [{"id":6145,"questions":[{"id":6559,"question_components":[{"id":18850,"answer":[80634165],"answer_status":null,"end_time":1591866979,"start_time":1591866978},{"id":18851,"answer":{"location":[56.439337,36.557897]},"answer_status":null,"start_time":1591866873,"end_time":1591867165}]}]}]
# print(task)
# print(time.ctime(1592235230))
get_questions(task.get('id'), session, headers)
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()
for q in json_quest['selected_chains']:
print(q['id'])
def send_image(session, headers, url):
"""Отправляем фото на сервер. Сервер должен вернуть id и url."""
files = {
'image': ('1.jpg', open('1.jpg', 'rb')),
}
img = session.post('https://knd.mosreg.ru//api/v1/executions/22515485/images', headers=headers, files=files)
return img.json()
# print(img.headers)
# print(img.text)
# print(img.status_code)
def get_addresses(email):
addresses = []
month = datetime.datetime.now().month
main_path = os.path.join(os.path.abspath('.'), 'data')
path = os.walk(os.path.join(main_path, email, str(month)))
for d, dirs, files in path:
addresses.append(dirs)
if len(addresses[0]) > 0:
return addresses[0]
else:
return f"Ни одного адреса для пользователя {email} не найдено! Добавьте фото и запустите программу снова!"
def assign_task(session, headers, task):
task = session.put('https://knd.mofsreg.ru//api/v1/executions/'+str(task['id'])+'/assign', headers=headers)
if task.status_code == 200:
pass
else:
print(f"Не смогли получить задание {task['id']}!")
def get_task(session, headers):
"""Получаем все доступные задания. Если в переменную search добавить адрес,
то будет искать этот адрес. Он попадет в
json_tasks['executions_available'],
так что надо понять откуда берем задания. Отсюда можно возвращать
все параметры задания:
1 координаты
2 адрес
3 подъезд
4 id_задания"""
# Получаем адреса
addresses = get_addresses(headers['uid'])
# Если адреса получили
if isinstance(addresses, list):
session_t = session
session_t.headers.update({'referer': 'https://knd.mosreg.ru/executions', 'x-platform': 'wb', 'accept': '*/*'})
for address in addresses:
search = address
data = {'search': search}
tasks = session_t.post('https://knd.mosreg.ru//api/v1/executions', headers=headers, data=data)
json_tasks = tasks.json()
# Если есть доступное задание с таким адресом
if len(json_tasks['executions_available']) > 0:
for n in json_tasks['executions_available']:
coord = n['coord']
enterance = n['tasks']
for execution in enterance:
task = {
'id': execution['execution_id'],
'address': execution['dimensions'][0].get('entity_value_name'),
'enterance': execution['dimensions'][2].get('entity_value_name'),
'coord': coord
}
# Принимаем задание
assign_task(session, headers, task)
# Если нет задания с таким адресом
else:
print(f"Нет доступных заданий для пользователя {headers['uid']} по адресу: {address}")
# Если адреса не получили выводим ошибку
else:
print(addresses)
def main():
users = Users()
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:
get_task(session, headers)
else:
print(f"Отказ в авторизации для пользователя {user['email']}!")
time.sleep(1)
else:
print(users.get_passwords())
if __name__ == "__main__":
main()
# headers = response.headers
# print(item[0]['tasks'])
# print(len(item[3]['tasks']))
# print(item[3]['coord'])
# count = 0
# for item in json_exec.get('executions_assigned'):
# print(item['tasks'])
# if count < 1:
# # for n in item['tasks']:
# # print(n['dimensions'])
# count = count + 1
# for task in item.get('tasks'):
# pass
# send_image(session, headers, "some")
# get_coord(str1)
# get_answers(session, headers)
# get_questions(session, headers)
# print(executions.text)
def random_string(stringLength):
letters = string.ascii_letters
digits = string.digits
return ''.join(random.choice(letters+digits) for i in range(stringLength))
# def get_coord(address):
# url = 'https://geocode-maps.yandex.ru/1.x/?format=json&apikey=591be3ec-2816-40ee-b575-08e687d27b37&geocode='+address
# coord = requests.get(url)
# print(coord.text)
# def get_task(session, task_id, headers):
# task = session.get('https://knd.mosreg.ru//api/v1/executions/', headers=headers)
# json_task = task.json()
# print(json_task)
# def get_answers(session, headers):
# answers = session.post('https://knd.mosreg.ru//api/v1/executions/22515485/answers', headers=headers)
# json_answers = answers.json()
# for ans in json_answers.get('question_chains'):
# print(ans)
# # print(json_answers)
# def get_questions(session, headers):
# question = session.get('https://knd.mosreg.ru//api/v1/executions/22515485/questions', headers=headers)
# json_question = question.json()
# for s in json_question['selected_chains']:
# for n in s['questions']:
# print(n['question_components'])