#!/bin/bash # shellcheck disable=SC1091,SC2181,SC2000 command -v curl >/dev/null 2>&1 || { echo >&2 "Ошибка: curl не установлен"; exit 1; } command -v jq >/dev/null 2>&1 || { echo >&2 "Ошибка: jq не установлен"; exit 1; } if [ $# -lt 1 ]; then echo >&2 "Ошибка: не указан ID страницы для загрузки" echo "Использование: $0 [...]" exit 1 fi [ ! -f ../.env ] && cp ../.env.example ../.env source ../.env [ -z "$CONF_URL" ] && { echo >&2 "Ошибка: CONF_URL не указан в файле .env"; exit 1; } [ -z "$CONF_USERNAME" ] && { echo >&2 "Ошибка: CONF_USERNAME не указан в файле .env"; exit 1; } [ -z "$CONF_PASSWORD" ] && { echo >&2 "Ошибка: CONF_PASSWORD не указан в файле .env"; exit 1; } OUTPUT_PATH="./input_html" [ ! -d "$OUTPUT_PATH" ] && mkdir -p "$OUTPUT_PATH" for PAGE_ID in "$@"; do API_ENDPOINT="${CONF_URL}/rest/api/content/${PAGE_ID}?expand=body.view,children.page,version" echo echo "Загрузка: $API_ENDPOINT" RESPONSE=$(curl -s -u "$CONF_USERNAME:$CONF_PASSWORD" -H "Accept: application/json" "${API_ENDPOINT}") if [ $? -ne 0 ]; then echo "$RESPONSE" exit 1 fi ERROR_MESSAGE=$(echo "$RESPONSE" | jq -r '.message' 2>/dev/null) if [ -n "$ERROR_MESSAGE" ] && [ "$ERROR_MESSAGE" != "null" ]; then echo "$RESPONSE" exit 1 fi CONTENT=$(echo "$RESPONSE" | jq -r .body.view.value) if [ -z "$CONTENT" ]; then echo "Пустая страница, пропущено" exit fi TITLE=$(echo "$RESPONSE" | jq -r .title) VERSION_NUM=$(echo "$RESPONSE" | jq -r .version.number) VERSION_WHEN=$(date -d "$(echo "$RESPONSE" | jq -r .version.when)" +'%d.%m.%Y %H:%M:%S %Z') VERSION_BY=$(echo "$RESPONSE" | jq -r .version.by.username) TITLE_ESC="${TITLE//\//_}" FILENAME="$TITLE_ESC.html" if [ "$(echo "$FILENAME" | wc -c)" -gt 255 ]; then # измерение по байтам, а не длине FILENAME="${TITLE_ESC:0:120}.html" fi HTML_FILEPATH="$OUTPUT_PATH/$FILENAME" CONTENT=${CONTENT//href=\"\//href=\"$CONF_URL/} CONTENT=${CONTENT//src=\"\//src=\"$CONF_URL/} URL="$CONF_URL/pages/viewpage.action?pageId=$PAGE_ID" cat > "$HTML_FILEPATH" < @@ $URL @@ ^^ $VERSION_NUM ^^ %% $VERSION_BY %% == $VERSION_WHEN ==

$TITLE

$CONTENT EOF echo "Сохранено: $OUTPUT_PATH/$TITLE.html" CHILD_IDS=$(echo "$RESPONSE" | jq -r '.children.page.results[]?.id' 2>/dev/null) for CHILD_ID in $CHILD_IDS; do echo "Переход к дочерней странице: $PAGE_ID => $CHILD_ID" $0 "$CHILD_ID" done done