import requests import xml.etree.ElementTree as ET from base64 import b64encode from server.backend.schemas.pydantic import settings import pandas as pd from server.backend.api.session import get_session session = get_session({ "Accept": "application/xml", }) def fetch_companies(): response = session.get(settings.URL_CONTRACTORS, timeout=10) response.raise_for_status() return response.text def parse_companies(xml: str): try: NS = { "atom": "http://www.w3.org/2005/Atom", "m": "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata", "d": "http://schemas.microsoft.com/ado/2007/08/dataservices", } rows = [] # Парсинг XML-ответа root = ET.fromstring(xml) # Извлечение конкретных данных for entry in root.findall('atom:entry', NS): properties = entry.find('atom:content',NS).find( 'm:properties', NS) rows.append({ 'Ref_Key': properties.findtext('d:Ref_Key', default=None, namespaces=NS), 'Description': properties.findtext('d:Description', default=None, namespaces=NS), 'FullName': properties.findtext('d:НаименованиеПолное', default=None, namespaces=NS), 'INN': properties.findtext('d:ИНН', default=None, namespaces=NS), 'KPP': properties.findtext('d:КПП', default=None, namespaces=NS), 'DoC': properties.findtext('d:ДатаСоздания', default=None, namespaces=NS), }) df = pd.DataFrame(rows) return df except ET.ParseError: raise def contractor(): xml_data = fetch_companies() root = parse_companies(xml_data) root.to_excel("./excel_files/contractors.xlsx")