clemmy/shitty_api.sh

79 lines
3.0 KiB
Bash
Raw Normal View History

2022-08-27 15:46:03 +10:00
#!/bin/sh
accs=$(cat ~/.config/clemmy/accounts.csv)
i=0
for line in ${accs[*]}; do
IFS=, read insts[$i] tokes[$i] <<< $line
i=$((i+1))
done
INSTANCE=${insts[0]}
TOKE=${tokes[0]}
baseurl="https://$INSTANCE/api/v3/"
# Please don't abuse jq like this
showpost='(.post | (.id | tostring)+" "+(.name | tostring)),
(.post.url)+", "+(.creator.display_name // .creator.name)+":",
((.comment // .post) | .published,
(.body // .content)),
""'
2022-09-09 02:16:00 +10:00
postsummary='(.post | (.id | tostring)+" "+(.name | tostring)),
(.post.url)+", "+(.creator.display_name // .creator.name)+":",
((.comment // .post) | .published),
""'
showcomment='(.comment | (.parent_id | tostring)+"->"+(.id | tostring))+", "+(.creator.display_name // .creator.name)+":",
2022-08-27 15:46:03 +10:00
((.comment // .post) | .published,
(.body // .content)),
""'
#Split this out because I specifically do want to include post IDs in some places. Or rather, I only don't want to include them on the comments view.
notif='(.comment | (.parent_id | tostring)+"->"+(.id | tostring))+" ("+(.post | (.id | tostring))+"), "+(.creator.display_name // .creator.name)+":",
((.comment // .post) | .published,
(.body // .content)),
""'
2022-08-27 15:46:03 +10:00
comments=".[] | $showcomment"
posts=".[] | $showpost"
notifs=".[] | $notif"
2022-08-27 15:46:03 +10:00
#Generics
get(){ curl -s "$baseurl$1?${*:3}" | jq "$2"; }
getauth(){ get "$1" "$2" "auth=$TOKE&${*:3}"; }
post(){ curl -s "$baseurl$1" --json "$(echo ${*:2} | jq .+{\"auth\":\"$TOKE\"})"; }
2022-08-29 19:30:57 +10:00
# I'm just gonna clone this thing rather than try to palm the -X PUT into post. I can fix it later.
put(){ curl -sX PUT "$baseurl$1" --json "$(echo ${*:2} | jq .+{\"auth\":\"$TOKE\"})"; }
2022-08-27 15:46:03 +10:00
#Utils
getbody(){ a=$(cat); body=${a//\"/\\\"}; }
actions="notifs notifs2 comments freepost shitpost follow unfollow home deref whoami login"
2022-08-27 15:46:03 +10:00
#Endpoints.
2022-08-29 19:30:57 +10:00
#Lurkan
notifs(){ getauth "user/replies" ".replies | $notifs"; }
notifs2(){ getauth "user/mention" ".mentions | $notifs"; }
following(){ home; }
home(){ getauth "post/list" ".posts | $posts" "type_=Subscribed"; }
comments(){ getauth "post" "(.post_view | $showpost), (.comments | reverse | $comments)" "id=$1"; }
2022-08-29 19:30:57 +10:00
#Postan
2022-09-15 02:24:35 +10:00
freepost(){ getbody; post "post" "{\"community_id\":$1,\"name\":\"${*:2}\",\"body\":\"$body\"}"; }
2022-08-29 19:30:57 +10:00
shitpost(){ getbody; postid=$1; parentid=$2; post "comment" "{\"post_id\":$postid,\"parent_id\":$parentid,\"content\":\"$body\"}"; }
#Post hoardan
save(){ put "post/save" "{\"post_id\":$1,\"save\":true}"; }
unsave(){ put "post/save" "{\"post_id\":$1,\"save\":false}"; }
2022-09-09 02:16:00 +10:00
load(){ getauth "post/list" ".posts | .[] | $postsummary" "type_=All&saved_only=true"; }
2022-08-29 19:30:57 +10:00
#Community hoardan
2022-08-27 15:46:03 +10:00
follow(){ post "community/follow" "{\"community_id\":$1,\"follow\":true}"; }
unfollow(){ post "community/follow" "{\"community_id\":$1,\"follow\":false}"; }
2022-08-29 19:30:57 +10:00
#Account hoardan
2022-08-27 15:46:03 +10:00
whoami(){ echo $INSTANCE $TOKE; }
login(){ post "user/login" "{\"username_or_email\":\"$1\",\"password\":\"$2\"}"; }
2022-08-29 19:30:57 +10:00
#Misc
deref(){ getauth "resolve_object" "" "q=$*"; }
2022-08-27 15:46:03 +10:00
2022-09-19 06:56:55 +10:00
while getopts "a:hv" o;do case "${o}" in
2022-08-27 15:46:03 +10:00
a) INSTANCE=${insts[$OPTARG]}; TOKE=${tokes[$OPTARG]};;
h) echo $actions; exit;;
2022-09-19 06:56:55 +10:00
v) echo 0.1.0; exit;;
2022-08-27 15:46:03 +10:00
esac done
shift $((OPTIND-1))
$*