The actual script
This commit is contained in:
parent
6ebab27b07
commit
46164bd19e
109
digest.sh
Executable file
109
digest.sh
Executable file
@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
url=$(curl -s -H Accept:application/activity+json "$1" | jq -r '.outbox' | xargs curl -s -H Accept:application/activity+json | jq -r '.first')
|
||||
targetdate=$(date -d "now - $2 days" +%s)
|
||||
|
||||
declare -A activities
|
||||
|
||||
# Mastodon has pagination, so - let's find the page that contains post from now to n days ago.
|
||||
|
||||
stop=false
|
||||
echo -n "Processing pages"
|
||||
while [ "$url" != "" ] && [ "$stop" != true ] ; do
|
||||
response=$(curl -s -H "Accept: application/activity+json" "$url")
|
||||
lines=$(echo "$response" | jq -c '.orderedItems[] | {id, published}')
|
||||
while IFS= read -r line; do
|
||||
ts=$(echo "$line" | jq -r '.published' | xargs date +%s -d)
|
||||
act=$(echo "$line" | jq -r '.id')
|
||||
if [[ "$ts" -gt "$targetdate" ]]; then
|
||||
activities["${ts}"]="$act"
|
||||
else
|
||||
stop=true
|
||||
fi
|
||||
done <<<"$lines"
|
||||
url=$(echo "$response" | jq -r .next)
|
||||
echo -n "."
|
||||
done
|
||||
echo ""
|
||||
|
||||
# We got some activities, so now let's extract relevant info form them, turning into actual posts data
|
||||
|
||||
declare -a posts
|
||||
echo -n "Processing activities"
|
||||
for key in "${!activities[@]}"; do
|
||||
activity="${activities[$key]}"
|
||||
response=$(curl -s -H "Accept: application/activity+json" "$activity")
|
||||
type=$(echo "$response" | jq -r '.type')
|
||||
datetime=$(echo "$response" | jq -r '.published')
|
||||
date=$(echo "$datetime" | cut -d "T" -f 1)
|
||||
time=$(echo "$datetime" | cut -d "T" -f 2 | tr -d "Z")
|
||||
if [[ "$type" = "Announce" ]]; then
|
||||
link=$(echo "$response" | jq -r '.object')
|
||||
object=$(curl -s -H "Accept: application/activity+json" "$link")
|
||||
content=$(echo "$object" | jq -r '.content')
|
||||
replyto=$(echo "$response" | jq -r '.inReplyRTo')
|
||||
actorlink=$(echo "$object" | jq -r '.attributedTo')
|
||||
attachment=$(echo "$object" | jq -jc '.attachment[].url' 2>/dev/null || echo null)
|
||||
if [ "$attachment" = "" ]; then
|
||||
attachment="null"
|
||||
fi
|
||||
by=$(curl -s -H "Accept: application/activity+json" "$actorlink" | jq -r '.name')
|
||||
else
|
||||
link=$(echo "$response" | jq -r '.object.id')
|
||||
content=$(echo "$response" | jq -r '.object.content')
|
||||
replyto=$(echo "$response" | jq -r '.object.inReplyTo')
|
||||
actorlink=$(echo "$response" | jq -r '.actor')
|
||||
attachment=$(echo "$response" | jq -jc '.object.attachment[].url' 2>/dev/null || echo null)
|
||||
if [ "$attachment" = "" ]; then
|
||||
attachment="null"
|
||||
fi
|
||||
by=$(curl -s -H "Accept: application/activity+json" "$actorlink" | jq -r '.name')
|
||||
fi
|
||||
posts+=("$date―$time―$type―$link―$by―$content―$replyto―$attachment")
|
||||
echo -n "."
|
||||
# $(echo $content | w3m -T text/html -dump)
|
||||
done
|
||||
|
||||
# Sort posts by date
|
||||
|
||||
IFS=$'\n' sortedPosts=($(sort <<<"${posts[*]}"))
|
||||
unset IFS
|
||||
|
||||
echo ""
|
||||
|
||||
# Render posts on the screen and via less
|
||||
|
||||
for i in "${sortedPosts[@]}"
|
||||
do
|
||||
date=$(echo "$i" | awk -F'―' '{ print $1 }')
|
||||
time=$(echo "$i" | awk -F'―' '{ print $2 }')
|
||||
type=$(echo "$i" | awk -F'―' '{ print $3 }')
|
||||
link=$(echo "$i" | awk -F'―' '{ print $4 }')
|
||||
by=$(echo "$i" | awk -F'―' '{ print $5 }')
|
||||
content=$(echo "$i" | awk -F'―' '{ print $6 }')
|
||||
replyto=$(echo "$i" | awk -F'―' '{ print $7 }')
|
||||
attachment=$(echo "$i" | awk -F'―' '{ print $8 }')
|
||||
|
||||
if [ "$prevdate" != "$date" ]; then
|
||||
echo -e "\e[1;41m====$date==== \e[0m"
|
||||
prevdate="$date"
|
||||
fi
|
||||
|
||||
if [[ "$type" = "Announce" ]]; then
|
||||
type="🔄"
|
||||
else
|
||||
type="✨"
|
||||
fi
|
||||
echo -e "\e[1;42m$type $time $by $link\e[0m"
|
||||
if [ "$replyto" != "null" ]; then
|
||||
echo " ↩️ $replyto"
|
||||
fi
|
||||
echo "$content" | w3m -T text/html -dump
|
||||
if [ "$attachment" != "null" ]; then
|
||||
echo "$attachment"
|
||||
fi
|
||||
done | less -r
|
||||
|
||||
#printf "[%s]\n" "${sortedPosts[@]}"
|
Loading…
Reference in New Issue
Block a user