Import JSON do AEM / Apache Sling
13 listopada, 2023
W środowisku zarządzania treścią automatyzacja zadań, takich jak import danych, odgrywa kluczową rolę. Importowanie treści do repozytorium JCR (Java Content Repository) może być złożonym zadaniem, zwłaszcza gdy dane są w formacie JSON. W tym artykule pokażemy, jak zautomatyzować ten proces za pomocą skryptu Python, który wykorzystuje REST API dostępne w Apache Sling.
Apache Sling i Adobe Experience Manager (AEM) stanowią elastyczne środowiska do zarządzania treścią, które opierają się na repozytorium JCR. Dzięki zastosowaniu REST API w Apache Sling, możliwe jest tworzenie skryptów automatyzujących operacje na danych. W naszym rozwiązaniu posłużymy się Pythonem, który dzięki swoim bibliotekom umożliwia proste i efektywne przetwarzanie danych oraz interakcję z API.
Konfiguracja Połączenia z API
Skrypt będzie używał REST API, by uzyskać dostęp do repozytorium i wprowadzić dane. W Apache Sling operacje na zasobach odbywają się przez HTTP, co sprawia, że proces jest intuicyjny i łatwy w monitorowaniu. Na początek konfigurujemy adresy URL oraz dane uwierzytelniające.
import requests
import json
BASE_URL = "http://adres-twojej-instancji:port"
API_ENDPOINT = f"{BASE_URL}/content-path" # ścieżka, gdzie chcesz zaimportować dane
AUTH = ("nazwa_użytkownika", "hasło")
Przygotowanie Danych do Importu
Skrypt pobierze lub wczyta dane JSON z pliku. Zakładamy, że dane są w formacie JSON i wymagają transformacji przed umieszczeniem w repozytorium JCR. Poniżej znajduje się przykładowy kod do wczytania pliku JSON i przygotowania go do importu.
def load_data(file_path):
with open(file_path, 'r') as file:
data = json.load(file)
return data
Implementacja Funkcji Importującej
Za pomocą requests
wysyłamy dane do repozytorium. Każda operacja zapisu w JCR wymaga określenia typu operacji, np. POST do tworzenia lub aktualizacji treści.
def import_content(data, endpoint, auth):
postData = {
':operation': 'import',
':contentType': 'json',
':replace': 'true',
':replaceProperties': 'true',
':content': json.dumps(content_data),
':name': page_name
}
response = requests.post(endpoint, auth=auth, headers={}, data=data)
if response.status_code == 200:
print("Import zakończony sukcesem!")
else:
print(f"Błąd: {response.status_code}, {response.text}")
Obsługa Potencjalnych Problemów
Warto zaimplementować podstawową obsługę błędów, aby skrypt działał stabilnie. W przypadku niepowodzenia, np. błędów autoryzacji lub konfliktów danych, możemy zapewnić odpowiednie informacje w logach.
Cały Skrypt
Łącząc te wszystkie kroki, możemy stworzyć elastyczny skrypt do importu plików JSON do naszego systemu CMS, jakim jest Adobe Experience Manager. Skrypt przyjmuje argumenty dotyczące autoryzacji, serwera i nazwy pliku do zaimportowania. Cały skrypt można zobaczyć na GitHubie
Automatyzacja procesu importu treści do JCR w Adobe Experience Manager i Apache Sling za pomocą Pythona upraszcza zarządzanie treścią i zapewnia przejrzystość operacji.