diff --git a/fedi2html.sh b/fedi2html.sh index 533fda8..54a8a77 100755 --- a/fedi2html.sh +++ b/fedi2html.sh @@ -203,8 +203,12 @@ fetch_post() { fetch_user_posts() { local url="$1" local server="$(url_server "$url")" + local status_url="$server/api/v1/accounts/$(url_user_id "$url")/statuses" + status_url="${status_url}?exclude_reblogs=${EXCLUDE_REBLOGS}&limit=$MAX_POSTS" + status_url="${status_url}&exclude_replies=${EXCLUDE_REPLIES}$TAG_FILTER" + curl --location --header 'Accept: application/json,application/activity+json' \ - "$server/api/v1/accounts/$(url_user_id "$url")/statuses?exclude_reblogs" \ + "$status_url" \ | jq -c '.[]' } @@ -335,27 +339,39 @@ handle_post_url() { usage() { - echo "usage: $(basename "$0") [-h] [-IR] POST_URL" + echo "usage: $(basename "$0") [-h] [-IRc] POST_URL" + echo " $(basename "$0") [-h] [-IRc] [-bBt] USER_URL" echo echo "$(basename "$0") does exactly what it says on the tin: It formats" - echo "a fediverse post (and its replies) into simple-and-embeddable HTML." + echo 'a fediverse post (and its replies) into simple-and-embeddable HTML.' echo - echo "It works with posts from any server that supports Mastodon’s API," - echo "including Pleroma, Akkoma, Glitch, etc." + echo 'It works with posts from any server that supports Mastodon’s API,' + echo 'including Pleroma, Akkoma, Glitch, etc.' echo - echo "Notably, it supports post-atachments and custom-emoji. Keep in mind" - echo "that images are all fetched from remote sources. It is recommended," - echo "if privacy or total archival, is a concern, to use wget(1)’s --mirror" - echo "(or something like it) to fetch even these foreign files." + echo 'Notably, it supports post-atachments and custom-emoji. Keep in mind' + echo 'that images are all fetched from remote sources. It is recommended,' + echo 'if privacy or total archival, is a concern, to use wget(1)’s --mirror' + echo '(or something like it) to fetch even these foreign files.' echo - echo " -c only print the responses (children) of a post" - echo " -h print this message and exit" - echo " -I display posts in reverse-chronological order" - echo " -R do not recursively display posts’ responses" + echo ' -c only print the responses (children) of a post' + echo ' -h print this message and exit' + echo ' -I display posts in reverse-chronological order' + echo ' -l output at maximum the specified amount of posts' + echo ' -R do not recursively display posts’ responses' + echo + echo ' -b exclude reblogs/repeats from user feed' + echo ' -B exclude top-level replies from user feed' + echo ' -t filter posts from user feed by tag' } -while getopts 'hcIR' arg; do +TAG_FILTER="" +EXCLUDE_REPLIES="false" +EXCLUDE_REBLOGS="false" +MAX_POSTS=20 + + +while getopts 'hcIRt:bm:B' arg; do case $arg in h) usage @@ -370,6 +386,18 @@ while getopts 'hcIR' arg; do R) NO_RESPONSES="1" ;; + t) + TAG_FILTER="&tagged=$OPTARG" + ;; + b) + EXCLUDE_REBLOGS="true" + ;; + m) + MAX_POSTS="$OPTARG" + ;; + B) + EXCLUDE_REPLIES="true" + ;; esac done @@ -383,17 +411,14 @@ if test -z "$URL"; then fi - - USER_ID="$(url_user_id "$URL")" POST_ID="$(url_post_id "$URL")" if test -n "$POST_ID"; then - echo "POST" handle_post_url "$URL" elif test -n "$USER_ID"; then handle_user_url "$URL" else - echo "That URL is not recognized as a post or user URL." 1>&2 + echo 'That URL is not recognized as a post or user URL.' 1>&2 exit 3 fi