#!/bin/sh #――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # Name: fedi2html.sh # Desc: # Reqs: # Date: #――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― url_id() { local url="$1" # Pleroma-style URLs: https://jam.xwx.moe/notice/Ac6PIZAP0ZzkMTYBBg # Mastodon-style URLs: https://esperanto.masto.host/@minjo/111461250815264185 if echo "$url" | grep "/notice/" > /dev/null; then echo "$url" \ | sed 's%.*/notice/%%' else echo "$url" \ | sed 's%.*/@[[:alnum:]]*/%%' fi } url_server() { local url="$1" local protocol="$(echo "$url" | grep --only-matching '[[:alnum:]]*://')" printf "$protocol" echo "$url" \ | sed 's%^'"$protocol"'%%' \ | sed 's%/.*%%' } statuses_api_request() { local post_url="$1" local api_request="$2" if test -n "$api_request"; then api_request="/$api_request" fi local id="$(url_id "$url")" local server="$(url_server "$url")" curl --location --header 'Accept: application/json,application/activity+json' \ "$server/api/v1/statuses/${id}${api_request}" } fetch_post_context() { local url="$1" statuses_api_request "$url" "context" } fetch_post() { local url="$1" statuses_api_request "$url" } POST_TEMPLATE='
$ACCOUNT_NAME $ACCOUNT_ID
$POST_CONTENT
' EMOJI_TEMPLATE='$EMOJI_SHORTCODE' replace_emojis() { local post_data="$1" local emojis="$(echo "$post_data" | jq -r '.emojis[]|(.url + "\t" + .shortcode)')" local temp="$(mktemp)" local IFS=" " cat > "$temp" for line in $emojis; do local EMOJI_URL="$(echo "$line" | awk '{print $1}')" local EMOJI_SHORTCODE="$(echo "$line" | awk '{print $2}')" local value="$(env_subst "$EMOJI_TEMPLATE")" sed -i "s%:${EMOJI_SHORTCODE}:%${value}%g" "$temp" done cat "$temp" rm "$temp" } prep_template() { local template="$1" echo "$template" \ | sed 's%\"%\\\"%g' } env_subst() { local template="$1" eval "echo \"$(prep_template "$template")\"" } render_post() { local post_data="$1" local ACCOUNT_URL="$(echo "$post_data" | jq -r .account.url)" local ACCOUNT_ID="$(echo "$post_data" | jq -r .account.fqn)" local ACCOUNT_NAME="$(echo "$post_data" | jq -r .account.display_name | replace_emojis "$post_data")" local ACCOUNT_AVATAR="$(echo "$post_data" | jq -r .account.avatar)" local POST_URL="$(echo "$post_data" | jq -r .url)" local POST_DATE="$(echo "$post_data" | jq -r .created_at)" local POST_CONTENT="$(echo "$post_data" | jq -r .content | replace_emojis "$post_data")" env_subst "$POST_TEMPLATE" }