#!/bin/sh

# this path should match your system
cd /home/pi/dev/crossword

# http://www.nytimes.com/svc/crosswords/v2/puzzle/daily-2015-11-30.puz
# A URL in this form will download the puzzle in pdf format

# get the current date
puzdate=`date "+%Y-%m-%d"`

# logfile
logfile="crossword.log"

# get the login page
url="https://myaccount.nytimes.com/auth/login"
curl -f -o login.html --stderr /dev/null $url

if [ "$?" -ne 0 ]; then
	echo "Curl failed trying to fetch login page" >> $logfile
	exit 1
fi

# extract token and expires values from login page
token=`grep token login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`
expires=`grep expires login.html | sed -e 's/^.*value="\([0-9a-f]\+\)".*$/\1/'`

if [ -z $token ]; then
	echo "Bad token" >> $logfile
	exit 1
fi

if [ -z $expires ]; then
	echo "Bad expiration timestamp" >> $logfile
	exit 1
fi

# keep this on the QT
# change these to your username and password
# keep '%40' in place of '@' in the e-mail address userid
userid="nobody%40example.com"
password="secret_password"

# sign in, save cookie file
curl -f -o /dev/null --stderr /dev/null -c cookies.txt \
	-d userid=$userid -d password=$password \
	-d is_continue=false -d remember=true \
	-d token=$token -d expires=$expires $url

if [ "$?" -ne 0 ]; then
	echo "Curl failed trying to sign in" >> $logfile
	exit 1
fi

nytimes=`grep -c nytimes cookies.txt`

if [ "$nytimes" -lt 1 ]; then
	echo "Bad cookies ($nytimes)" >> $logfile
	exit 1
fi

# download puzzle in .pdf format
url="http://www.nytimes.com/svc/crosswords/v2/puzzle/daily-$puzdate.pdf"
curl -f -o daily-$puzdate.pdf --stderr /dev/null -b cookies.txt $url

if [ "$?" -ne 0 ]; then
	echo "Curl failed trying to download pdf" >> $logfile
	exit 1
fi

# clean up workspace
rm -f cookies.txt
rm -f login.html

# print the puzzle
# you gotta have a line printer set up, of course
lp -d Brother daily-$puzdate.pdf

Page rendered in 0.0024 seconds.