#!/bin/sh -eu # vim: sw=2 et COOKIES="${HOME}/.adventofcode.json" YEAR=${YEAR:-$(date +%Y)} DAY=${DAY:-$(TZ=EST date '+%d')} DEC=$(echo "${DAY}" | sed 's/^0//') MODE="wget" # https://stackoverflow.com/q/21919156/how-do-i-copy-cookies-from-chrome SESSION=$(jq < "${COOKIES}" '."session-cookie"') check_dependency_availability() { local bin for bin in 'elinks' \ 'jq' \ 'wget' do if ! which "${bin}" >/dev/null; then echo "Missing dependency: ${bin}" >&2 exit 1 fi done } concat() { local part for part in "$@"; do printf '%s' "${part}" done } authenticated_wget() { wget \ --server-response \ --header "Cookie: session=${SESSION}" \ "${@}" } check_dependency_availability if [ "${MODE}" = 'wget' ]; then cd "${YEAR}" cd 'rust' mkdir "day${DAY}" || : cd "day${DAY}" # https://stackoverflow.com/q/21919156/how-do-i-copy-cookies-from-chrome SESSION=$(jq < "${COOKIES}" '."session-cookie"' | tr -d '"') if [ -e "input" ]; then echo 'Directory input already exists. Skipping.' else mkdir 'input' authenticated_wget --output-document "input/page_${DEC}.html" \ "https://adventofcode.com/${YEAR}/day/${DEC}" SETTINGS=$(authenticated_wget --output-document='-' \ "https://adventofcode.com/${YEAR}/settings") USERNAME=$(echo "${SETTINGS}" | sed -n 's#.*display_name.*checked.*\(.*\).*#\1#p') echo "Found username: ${USERNAME}" authenticated_wget --output-document "input/${USERNAME}" \ "https://adventofcode.com/${YEAR}/day/${DEC}/input" elinks -dump "./input/page_${DEC}.html" >"input/page_${DEC}.txt" sed -n 's/^ \([^ ]\)/\1/p' <"input/page_${DEC}.txt" >"input/example.txt" fi elif [ "${MODE}" = 'aocdl' ]; then # One could possibly use the golang implemenation instead of wget: # https://github.com/GreenLightning/advent-of-code-downloader # # It has more features, but it is always a hassle to install extra things. # # go get github.com/GreenLightning/advent-of-code-downloader/aocdl ~/.go/bin/aocdl -output "{{.Year}}/rust/{{.Day}}" fi