feat: add JSON and CSV file output with argparse
This commit is contained in:
+33
-4
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Получение списка заявок из ServiceDesk Plus. Экспорт: Группа, Описание, Назначено, Категория в JSONL."""
|
||||
"""Получение списка заявок из ServiceDesk Plus. Экспорт: Группа, Описание, Назначено, Категория в JSONL/JSON/CSV."""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import csv
|
||||
import urllib3
|
||||
from datetime import datetime
|
||||
from html import unescape
|
||||
@@ -86,7 +87,7 @@ def get_ticket_detail(ticket_id):
|
||||
except Exception as e:
|
||||
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"
|
||||
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
|
||||
})
|
||||
|
||||
# Определяем путь для файлов по умолчанию (та же директория что и скрипт)
|
||||
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:
|
||||
print(json.dumps(row, ensure_ascii=False))
|
||||
|
||||
print(f"LOG: Выведено {len(rows)} заявок", file=sys.stderr)
|
||||
|
||||
if __name__ == "__main__":
|
||||
from_date = sys.argv[1] if len(sys.argv) > 1 else "2026-07-20"
|
||||
list_tickets(from_date)
|
||||
import argparse
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user