#!/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
' replace_emojis() { local post_data="$1" local emojis="$2" # So, this function is recusive; in hindsight, it didn’t have to be. oh well! if test -n "$post_data" -a -z "$emojis"; then # Init case; start subsitutions in next level of recursion replace_emojis \ "" \ "$(echo "$post_data" \ | jq -r '.emojis[]|(.url + "\t" + .shortcode)')" elif test -n "$emojis"; then # Substitute the current emoji (first line of $emojis) local url="$(echo "$emojis" | head -1 | awk '{print $1}')" local shortcode="$(echo "$emojis" | head -1 | awk '{print $2}')" sed "s%:${shortcode}:%%g" \ | replace_emojis \ "" \ "$(echo "$emojis" | tail +2)" else # End-case; $emojis is empty, so our job is done. # Just print the results. cat fi } 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")" eval "echo \"$(echo "$POST_TEMPLATE" | sed 's%\"%\\\"%g')\"" }