summaryrefslogtreecommitdiff
path: root/bin/fetch_input
blob: ec0932816e50fea072cd30b5c240dd43b12a468a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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