-
-
Save wcasanova/74ee98ffbfc5f55329f8eea77f8f6bec to your computer and use it in GitHub Desktop.
Download all sgf files for a user from online-go.com
This file contains hidden or 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/bash | |
# | |
# This program will download all games on online-go.com for a specified user | |
BASE='https://online-go.com/' | |
API='api/v1' | |
# Get username and ID | |
echo 'What is your OGS Username? ' | |
read USERNAME | |
PLAYERINFO=$(curl $BASE$API'/players?username='$USERNAME 2> /dev/null | jq '.results[0]') | |
PLAYERID=$(echo $PLAYERINFO | jq '.id') | |
echo $PLAYERID | |
# Verify the ID is correct | |
if [[ $(echo $PLAYERINFO | jq '.username' | sed 's/"//g') != "$USERNAME" ]]; then | |
echo "Invalid ID or username!" | |
exit 1 | |
fi | |
# Retrieve Game IDs | |
PAGEURL=$BASE$API'/players/'$PLAYERID'/games' | |
GAMELIST=$(curl $PAGEURL 2> /dev/null) | |
NUMGAMES=$(echo $GAMELIST | jq '.count') | |
echo "Downloading $NUMGAMES games..." | |
IDS=$(echo $GAMELIST | jq '.results[] | .id')' ' | |
while [[ $(echo $GAMELIST | jq '.next') != null ]]; do | |
PAGEURL=$(echo $GAMELIST | jq '.next' | sed 's/"//g') | |
echo $PAGEURL | |
GAMELIST=$(curl $PAGEURL 2> /dev/null) | |
IDS+=$(echo $GAMELIST | jq '.results[] | .id')' ' | |
done | |
# For some eye candy to display how far along we are in downloading | |
progress_bar() | |
{ | |
local COUNT=$1 | |
local MAX=$2 | |
local MAXLENGTH=$3 | |
echo -ne "\r" | |
echo -ne "[" | |
local BARCOUNT=$(($COUNT * $MAXLENGTH / $MAX)) | |
perl -E "print '#' x $BARCOUNT" | |
perl -E "print ' ' x ($MAXLENGTH - $BARCOUNT)" | |
echo -ne "]($1/$2)" | |
} | |
# Download each game and give it a filename | |
COUNT=1 | |
for ID in $IDS; do | |
progress_bar $COUNT $NUMGAMES 40 | |
COUNT=$(($COUNT + 1)) | |
GAMEINFO=$(curl $BASE$API'/games/'$ID'/' 2> /dev/null) | |
WHITE=$(echo $GAMEINFO | jq '.players.white.username' | sed 's/"//g') | |
BLACK=$(echo $GAMEINFO | jq '.players.black.username' | sed 's/"//g') | |
FILENAME="${ID}-${WHITE}-${BLACK}.sgf" | |
if [[ ! -e "$FILENAME" ]]; then | |
curl -o "$FILENAME" $BASE$API'/games/'$ID'/sgf' 2> /dev/null | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment