diff options
Diffstat (limited to 'bin/fetch_input')
-rwxr-xr-x | bin/fetch_input | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/bin/fetch_input b/bin/fetch_input new file mode 100755 index 0000000..ec09328 --- /dev/null +++ b/bin/fetch_input @@ -0,0 +1,79 @@ +#!/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.*<span>\(.*\)</span>.*#\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 |