-
-
Save infinisil/ddd0c742fa76b06834bf93f99020cf80 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Get from https://dev.twitch.tv/docs/api/#step-1-setup | |
clientId= | |
headers=$(mktemp) | |
get() { | |
if rg 'ratelimit-remaining: 0' "$headers" >/dev/null; then | |
echo "API limit reached, waiting for 3 seconds.." >&2 | |
sleep 3 | |
fi | |
url="https://api.twitch.tv/helix/$1" | |
shift | |
while ! result=$(curl -sSf -H "Client-ID: $clientId" -D "$headers" -G "$url" "$@"); do | |
echo "Error response: $result" >&2 | |
cat "$headers" >&2 | |
done | |
echo "$result" | |
} | |
choosegame() { | |
echo -n "What game [empty for any game]? " | |
read game | |
if [ -n "$game" ] && ! gameid=$(get games --data-urlencode "name=$game" | jq '.data[]?.id' -r -e); then | |
echo "Couldn't get game id for game '$game'" >&2 | |
choosegame | |
fi | |
} | |
choosegame | |
gameidpart=${gameid:+--data-urlencode "game_id=$gameid"} | |
echo -n "What language (ISO 639-1 code) [empty for en]? " | |
read language | |
language=${language:-en} | |
echo "Game $game ($gameid), language $language" | |
streamUsers() { | |
pagepart=${1:+--data-urlencode "after=$1"} | |
echo "Getting streams for $game in $language${1:+ after cursor $1}" >&2 | |
result=$(get streams \ | |
--data-urlencode "language=$language" \ | |
--data-urlencode "first=100" \ | |
$pagepart \ | |
$gameidpart) | |
jq '.data[].user_id' -r <<< "$result" | |
cursor=$(jq '.pagination.cursor' -r <<< "$result") | |
if [ "$cursor" = null ]; then | |
echo "No more streams" >&2 | |
else | |
streamUsers "$cursor" | |
fi | |
} | |
userToUrl() { | |
result=$(get users --data-urlencode "id=$1") | |
login=$(echo "$result" | jq '.data[].login' -r) | |
echo "https://twitch.tv/$login" | |
} | |
streamUsers | shuf | while read user; do | |
mpv "$(userToUrl "$user")" "$@" | |
done | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment