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