Skip to content

Instantly share code, notes, and snippets.

@wormyrocks
Last active December 4, 2020 06:14
Show Gist options
  • Save wormyrocks/c57718af7405eb979985d48446027ec2 to your computer and use it in GitHub Desktop.
Save wormyrocks/c57718af7405eb979985d48446027ec2 to your computer and use it in GitHub Desktop.
Graphical Kickstarter tracker
#!/bin/bash
# Track a Kickstarter page in real time
# License: https://raw.githubusercontent.com/Zuph/ACAB-License/master/LICENSE.md/LICENSE.md
# Github Gists don't preserve file permissions - check the comments on this page
# for a downloadable copy of this script whose permissions have already been set.
interval=10 # refresh interval in seconds
graph_interval=240 # how frequently we add to the histogram
url="https://www.kickstarter.com/projects/lookingglass/looking-glass-portrait/stats.json"
moveto () { echo -e "\033[$1;$2H"; }
[[ -z $1 ]] && {
clear
cols=$(tput cols)
graph=$(mktemp)
prev=$(mktemp)
while true; do echo -e "\033[0;0H`$0 $graph $prev $cols`"; sleep $interval; done;
} ||
graph=$1
log_prev=$2
cols=$3
rows=$(tput lines)
data=$(curl $url 2> /dev/null )
LC_ALL=en_US.UTF-8
backers=$(echo -e $data | sed 's|.*backers_count":\([0-9]*\),.*|\1|')
comments=$(echo -e $data | sed 's|.*comments_count":\([0-9]*\),.*|\1|')
pledged=$(echo -e $data | sed 's|.*pledged":"\([0-9]*\).*|\1|')
now=$(date +%s)
last=$(date -r $graph +%s 2>/dev/null || echo 0)
fill () { for a in `seq $1`; do echo -n $2; done }
width=$(($cols-11))
divider_1=$(($width*4/10))
divider_2=$(($width-$divider_1))
update_prev () { echo $backers > $log_prev; printf "%d\n" $pledged >> $log_prev; }
[[ -s $log_prev ]] || update_prev
prev_backers=$(head -n1 $log_prev)
prev_pledged=$(tail -n1 $log_prev)
backer_delta=$(($backers - $prev_backers))
pledge_delta=$(($pledged - $prev_pledged))
graphline () {
now_=$(date $1)
echo -n "|"
text=
[[ "$backer_delta" -eq "0" ]] || { fill $backer_delta =; text=$(printf "+%d." $backer_delta); }
fill $(($divider_1 - $backer_delta - $(echo -n "0$text" | wc -c))) .
echo -n "$text|"
[[ "$pledge_delta" -eq "0" ]] || { fill $((pledge_delta/100)) '$'; text=$(printf "(+\$%'.2f)" $pledge_delta); }
fill $(($divider_2 - $pledge_delta/100 - $(echo -n "0$text" | wc -c))) .
printf "$text| $now_\r\n"
}
text="|Backers"
text2=$(printf "%d." $backers)
echo -n $text
fill $(($divider_1-$(echo -n "$text$text2" | wc -c))) .
echo -n $text2
text="|Pledges"
text2=$(printf "\$%'.2f." $pledged)
echo -n $text
fill $(($divider_2-$(echo -n "$text$text2" | wc -c))) .
echo -n $text2
echo "|"
line=$(graphline "+%I:%M:%S")
echo $line
cat $graph | head -n $(($rows-4))
if (( $(($now - $last)) > $graph_interval )); then
echo -e "$line\n$(cat $graph)" > $graph
update_prev
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment