Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #
- # download streamelements history and print to stdout
- #
- # usage:
- # bubb4dump.sh >history.json
- CHANNEL_ID='5f9f61c9389f1af859e15be1'
- LIMIT=100
- TIMELIMIT=$((3600 * 24 * 1))
- JWT_TOKEN='' # optional
- authcurl() { if [ -n "$JWT_TOKEN" ]; then curl "$@" -H "Authorization: Bearer $JWT_TOKEN"; else curl "$@"; fi; }
- getpage() {
- authcurl -s -XGET -H 'Accept: application/json' \
- "https://api.streamelements.com/kappa/v2/songrequest/$CHANNEL_ID/history?limit=$LIMIT&offset=$1"
- }
- numitems() { jq '.history|length'; }
- filterdate() {
- jq '.history |= map(select(
- (now - (.createdAt | sub("(?<time>.*)\\..*Z"; "\(.time)Z") | fromdateiso8601)) < '"$TIMELIMIT"'
- ))'
- }
- main() {
- echo >&2 "getting songs played after: $(date -d @"$(($(date +%s) - TIMELIMIT))")"
- PAGEJSON=$(getpage 0 | filterdate)
- TOTALITEMS=$(echo "$PAGEJSON" | jq '.total')
- echo >&2 "total songs in history: $TOTALITEMS"
- sleep 1s
- {
- echo "$PAGEJSON"
- NUMITEMS=$(echo "$PAGEJSON" | numitems)
- if [ "$NUMITEMS" -eq 0 ]; then
- return
- fi
- for i in $(seq "$LIMIT" "$LIMIT" "$TOTALITEMS"); do
- echo >&2 "getting $i"
- PAGEJSON=$(getpage "$i" | filterdate)
- echo "$PAGEJSON"
- NUMITEMS=$(echo "$PAGEJSON" | numitems)
- if [ "$NUMITEMS" -eq 0 ]; then
- return
- fi
- sleep 1s
- done
- } | jq -sc '[.[].history|.[]]'
- echo >&2 "done"
- }
- main "$@"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement