feat: add JSON and CSV file output with argparse

This commit is contained in:
dddennnisss
2026-07-27 12:20:49 +07:00
parent 748b262936
commit 00630cd18c
+33 -4
View File
@@ -1,8 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""Получение списка заявок из ServiceDesk Plus. Экспорт: Группа, Описание, Назначено, Категория в JSONL.""" """Получение списка заявок из ServiceDesk Plus. Экспорт: Группа, Описание, Назначено, Категория в JSONL/JSON/CSV."""
import requests import requests
import json import json
import csv
import urllib3 import urllib3
from datetime import datetime from datetime import datetime
from html import unescape from html import unescape
@@ -86,7 +87,7 @@ def get_ticket_detail(ticket_id):
except Exception as e: except Exception as e:
return {} return {}
def list_tickets(from_date="2026-07-20"): def list_tickets(from_date="2026-07-20", json_file=None, csv_file=None):
url = f"{SERVER_URL}/api/v3/requests" url = f"{SERVER_URL}/api/v3/requests"
headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"} headers = {"authtoken": API_KEY, "Accept": "application/vnd.manageengine.sdp.v3+json"}
@@ -129,11 +130,39 @@ def list_tickets(from_date="2026-07-20"):
"category": category "category": category
}) })
# Определяем путь для файлов по умолчанию (та же директория что и скрипт)
script_dir = os.path.dirname(os.path.abspath(__file__))
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
if json_file is None:
json_file = os.path.join(script_dir, f"tickets_{timestamp}.json")
if csv_file is None:
csv_file = os.path.join(script_dir, f"tickets_{timestamp}.csv")
# Сохраняем JSON
with open(json_file, 'w', encoding='utf-8') as f:
json.dump(rows, f, ensure_ascii=False, indent=2)
print(f"LOG: JSON сохранён: {json_file}")
# Сохраняем CSV
with open(csv_file, 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=["group", "description", "assignee", "category"])
writer.writeheader()
writer.writerows(rows)
print(f"LOG: CSV сохранён: {csv_file}")
# Выводим JSONL в консоль
for row in rows: for row in rows:
print(json.dumps(row, ensure_ascii=False)) print(json.dumps(row, ensure_ascii=False))
print(f"LOG: Выведено {len(rows)} заявок", file=sys.stderr) print(f"LOG: Выведено {len(rows)} заявок", file=sys.stderr)
if __name__ == "__main__": if __name__ == "__main__":
from_date = sys.argv[1] if len(sys.argv) > 1 else "2026-07-20" import argparse
list_tickets(from_date) parser = argparse.ArgumentParser(description="Выгрузка заявок из ServiceDesk Plus")
parser.add_argument("--from", dest="from_date", default="2026-07-20", help="Дата начала (YYYY-MM-DD)")
parser.add_argument("--json", dest="json_file", default=None, help="Путь к JSON файлу")
parser.add_argument("--csv", dest="csv_file", default=None, help="Путь к CSV файлу")
args = parser.parse_args()
list_tickets(from_date=args.from_date, json_file=args.json_file, csv_file=args.csv_file)