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.