Advertisement
Guest User

Untitled

a guest
Jan 17th, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.53 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # download streamelements history and print to stdout
  4. #
  5. # usage:
  6. #   bubb4dump.sh >history.json
  7.  
  8. CHANNEL_ID='5f9f61c9389f1af859e15be1'
  9. LIMIT=100
  10. TIMELIMIT=$((3600 * 24 * 1))
  11. JWT_TOKEN='' # optional
  12.  
  13. authcurl() { if [ -n "$JWT_TOKEN" ]; then curl "$@" -H "Authorization: Bearer $JWT_TOKEN"; else curl "$@"; fi; }
  14.  
  15. getpage() {
  16.     authcurl -s -XGET -H 'Accept: application/json' \
  17.         "https://api.streamelements.com/kappa/v2/songrequest/$CHANNEL_ID/history?limit=$LIMIT&offset=$1"
  18. }
  19.  
  20. numitems() { jq '.history|length'; }
  21.  
  22. filterdate() {
  23.     jq '.history |= map(select(
  24.        (now - (.createdAt | sub("(?<time>.*)\\..*Z"; "\(.time)Z") | fromdateiso8601)) < '"$TIMELIMIT"'
  25.    ))'
  26. }
  27.  
  28. main() {
  29.     echo >&2 "getting songs played after: $(date -d @"$(($(date +%s) - TIMELIMIT))")"
  30.    PAGEJSON=$(getpage 0 | filterdate)
  31.    TOTALITEMS=$(echo "$PAGEJSON" | jq '.total')
  32.    echo >&2 "total songs in history: $TOTALITEMS"
  33.    sleep 1s
  34.    {
  35.        echo "$PAGEJSON"
  36.        NUMITEMS=$(echo "$PAGEJSON" | numitems)
  37.        if [ "$NUMITEMS" -eq 0 ]; then
  38.            return
  39.        fi
  40.  
  41.        for i in $(seq "$LIMIT" "$LIMIT" "$TOTALITEMS"); do
  42.            echo >&2 "getting $i"
  43.  
  44.            PAGEJSON=$(getpage "$i" | filterdate)
  45.            echo "$PAGEJSON"
  46.  
  47.            NUMITEMS=$(echo "$PAGEJSON" | numitems)
  48.            if [ "$NUMITEMS" -eq 0 ]; then
  49.                return
  50.            fi
  51.  
  52.            sleep 1s
  53.        done
  54.    } | jq -sc '[.[].history|.[]]'
  55.    echo >&2 "done"
  56. }
  57.  
  58. main "$@"
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement