162 lines
4.6 KiB
Bash
Executable File
162 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
VERSION="2025.04"
|
||
|
||
# Configuration
|
||
HOST="https://your-api-host.com"
|
||
ENDPOINT="/api/subscriptions/get_subscriptions.php"
|
||
API_KEY="your_api_key_here"
|
||
|
||
# Defaults
|
||
MODE="md"
|
||
FULL=false
|
||
OUTPUT="" # Will set default per mode later
|
||
|
||
# Show help
|
||
show_help() {
|
||
cat << EOF
|
||
ℹ️ Wallos Fetcher Script - v$VERSION
|
||
|
||
Usage: ./wallos-fetch.sh [OPTIONS]
|
||
|
||
Fetch and export subscription data from a Wallos instance.
|
||
|
||
Options:
|
||
--json Output raw JSON
|
||
--md Output Markdown table
|
||
--full Include more fields in CSV/Markdown
|
||
--output <file> Custom output filename
|
||
--help Show this help message and exit
|
||
--version Show version and exit
|
||
|
||
Default output is Markdown.
|
||
EOF
|
||
}
|
||
|
||
# Argument parser
|
||
while [[ "$#" -gt 0 ]]; do
|
||
case "$1" in
|
||
--json) MODE="json" ;;
|
||
--md) MODE="md" ;;
|
||
--full) FULL=true ;;
|
||
--output)
|
||
shift
|
||
OUTPUT="$1"
|
||
;;
|
||
--help) show_help; exit 0 ;;
|
||
--version) echo "❓ wallos-fetch v$VERSION"; exit 0 ;;
|
||
*) echo "Unknown option: $1" && show_help && exit 1 ;;
|
||
esac
|
||
shift
|
||
done
|
||
|
||
# Set default filenames if none specified
|
||
if [[ -z "$OUTPUT" ]]; then
|
||
case "$MODE" in
|
||
json) OUTPUT="subscriptions.json" ;;
|
||
md) OUTPUT="subscriptions.md" ;;
|
||
csv) OUTPUT="subscriptions.csv" ;;
|
||
esac
|
||
fi
|
||
|
||
# Construct the API URL
|
||
URL="${HOST}${ENDPOINT}?api_key=${API_KEY}"
|
||
|
||
# Perform the request
|
||
RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" "$URL")
|
||
BODY=$(echo "$RESPONSE" | sed -n '1,/^HTTP_STATUS:/p' | sed '$d')
|
||
STATUS=$(echo "$RESPONSE" | tr -d '\n' | sed -e 's/.*HTTP_STATUS://')
|
||
|
||
echo "HTTP Status: $STATUS"
|
||
|
||
if [ "$STATUS" -eq 200 ]; then
|
||
echo "$BODY" > temp_response.json
|
||
|
||
if [ "$MODE" == "json" ]; then
|
||
mv temp_response.json "$OUTPUT"
|
||
echo "💾 Saved JSON to $OUTPUT"
|
||
|
||
elif [ "$MODE" == "md" ]; then
|
||
# Write markdown header and description
|
||
{
|
||
echo "# 🧾 Active Subscriptions Overview"
|
||
echo ""
|
||
echo "This document lists all recurring subscriptions tied to this household or individual. It includes costs, renewal dates, categories, and payment methods. This record is provided as a reference for financial planning, digital legacy management, or to assist family members in case of emergencies or estate matters."
|
||
echo ""
|
||
echo "_Last updated: $(date +'%Y-%m-%d')_"
|
||
echo ""
|
||
} > "$OUTPUT"
|
||
|
||
if [ "$FULL" = true ]; then
|
||
echo "| ID | Name | Price | Currency | Next Payment | Cycle | Auto Renew | Category | Payment Method |" >> "$OUTPUT"
|
||
echo "|----|------|-------|----------|---------------|-------|-------------|----------|----------------|" >> "$OUTPUT"
|
||
jq -r '
|
||
.subscriptions[] | [
|
||
.id,
|
||
.name,
|
||
(.price | tostring),
|
||
.currency_id,
|
||
.next_payment,
|
||
.cycle,
|
||
.auto_renew,
|
||
(.category_name | gsub(">"; ">") | gsub("&"; "&")),
|
||
.payment_method_name
|
||
] | @tsv
|
||
' temp_response.json | while IFS=$'\t' read -r id name price curr next cycle renew cat pay; do
|
||
echo "| $id | $name | $price | $curr | $next | $cycle | $renew | $cat | $pay |" >> "$OUTPUT"
|
||
done
|
||
else
|
||
echo "| ID | Name | Price | Next Payment | Category | Payment Method |" >> "$OUTPUT"
|
||
echo "|----|------|-------|---------------|----------|----------------|" >> "$OUTPUT"
|
||
jq -r '
|
||
.subscriptions[] | [
|
||
.id,
|
||
.name,
|
||
(.price | tostring),
|
||
.next_payment,
|
||
(.category_name | gsub(">"; ">") | gsub("&"; "&")),
|
||
.payment_method_name
|
||
] | @tsv
|
||
' temp_response.json | while IFS=$'\t' read -r id name price next cat pay; do
|
||
echo "| $id | $name | $price | $next | $cat | $pay |" >> "$OUTPUT"
|
||
done
|
||
fi
|
||
rm -f temp_response.json
|
||
echo "💾 Saved Markdown table to $OUTPUT"
|
||
|
||
else
|
||
if [ "$FULL" = true ]; then
|
||
echo '"id","name","price","currency_id","next_payment","cycle","auto_renew","category_name","payment_method_name"' > "$OUTPUT"
|
||
jq -r '
|
||
.subscriptions[] | [
|
||
.id,
|
||
.name,
|
||
.price,
|
||
.currency_id,
|
||
.next_payment,
|
||
.cycle,
|
||
.auto_renew,
|
||
.category_name,
|
||
.payment_method_name
|
||
] | @csv
|
||
' temp_response.json >> "$OUTPUT"
|
||
else
|
||
echo '"id","name","price","next_payment","category_name","payment_method_name"' > "$OUTPUT"
|
||
jq -r '
|
||
.subscriptions[] | [
|
||
.id,
|
||
.name,
|
||
.price,
|
||
.next_payment,
|
||
.category_name,
|
||
.payment_method_name
|
||
] | @csv
|
||
' temp_response.json >> "$OUTPUT"
|
||
fi
|
||
rm -f temp_response.json
|
||
echo "💾 Saved CSV to $OUTPUT"
|
||
fi
|
||
else
|
||
echo "❌ Request failed. Response not saved."
|
||
fi
|