import requests
import os
import uuid
from datetime import datetime
service_url = "https://int44.zakupki.gov.ru/eis-integration/services/getDocsLE2"
token = "ваш_токен"
save_path = r"путь для сохранения архива"
#SOAP-запрос
soap_request_template = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://zakupki.gov.ru/fz44/get-docs-le/ws">
<soapenv:Header>
<token>{token}</token>
</soapenv:Header>
<soapenv:Body>
<ws:getDocsByOrgRegionRequest>
<index>
<id>{request_id}</id>
<createDateTime>{create_date}</createDateTime>
<mode>PROD</mode>
</index>
<selectionParams>
<orgRegion>38</orgRegion>
<subsystemType>PRIZ</subsystemType>
<documentType44>epNotificationEZK2020</documentType44>
<periodInfo>
<exactDate>2024-11-28</exactDate>
</periodInfo>
</selectionParams>
</ws:getDocsByOrgRegionRequest>
</soapenv:Body>
</soapenv:Envelope>"""
# Функция для создания запроса
def create_soap_request():
request_id = str(uuid.uuid4())
create_date = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
return soap_request_template.format(token=token, request_id=request_id, create_date=create_date)
# Функция для отправки SOAP-запроса
def send_soap_request():
headers = {
"Content-Type": "text/xml; charset=utf-8",
}
data = create_soap_request()
response = requests.post(service_url, headers=headers, data=data, verify=False)
response.raise_for_status()
return response.text
# Функция для загрузки архива
def download_archive(archive_url, archive_name):
headers = {
"User-Agent": "Mozilla/5.0"
}
try:
with requests.Session() as session:
response = session.get(archive_url, headers=headers, stream=True, verify=False)
response.raise_for_status()
# Сохраняем файл
file_path = os.path.join(save_path, archive_name)
with open(file_path, "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f"Архив скачан: {file_path}")
except requests.exceptions.HTTPError as http_err:
print(f"HTTP ошибка при загрузке: {http_err}")
except Exception as err:
print(f"Ошибка при загрузке архива: {err}")
# Исполнение
def main():
try:
print("Отправляем запрос к серверу для формирования архива...")
response = send_soap_request()
print("Ответ сервера:")
print(response)
if "<archiveUrl>" in response:
archive_url_start = response.find("<archiveUrl>") + len("<archiveUrl>")
archive_url_end = response.find("</archiveUrl>")
archive_url = response[archive_url_start:archive_url_end]
print(f"Ссылка на архив: {archive_url}")
# Извлекаем данные для имени файла
id_start = response.find("<id>") + len("<id>")
id_end = response.find("</id>")
archive_id = response[id_start:id_end]
date_start = response.find("<createDateTime>") + len("<createDateTime>")
date_end = response.find("</createDateTime>")
create_date = response[date_start:date_end].replace(":", "-")
archive_name = f"epNotificationEZK2020_{create_date}_{archive_id}.zip"
print("Загрузка архива...")
if not os.path.exists(save_path):
os.makedirs(save_path)
download_archive(archive_url, archive_name)
else:
print("Ссылка отсутствует")
except Exception as e:
print(f"Произошла ошибка: {e}")
if __name__ == "__main__":
main()