Skip to content

Instantly share code, notes, and snippets.

@rubysolo
Last active December 17, 2015 15:09
Show Gist options
  • Save rubysolo/5629445 to your computer and use it in GitHub Desktop.
Save rubysolo/5629445 to your computer and use it in GitHub Desktop.
casper = require('casper').create
logLevel: 'debug'
fs = require('fs')
username = casper.cli.args[0]
password = casper.cli.args[1]
currentProblem = 1
problemCount = 173
getProblem = (number) ->
url = "http://www.4clojure.com/problem/#{ number }"
@start url, ->
title = @evaluate -> jQuery('#prob-title').text()
description = @evaluate -> jQuery('#prob-desc').text()
test_cases = @evaluate -> jQuery('table.testcases .CodeMirror.test').map(-> ";; #{ jQuery(this).text() }").toArray().join("\n")
solution = @evaluate -> jQuery('#code-box').val()
fs.write "#{ number }-#{ title.toLowerCase().replace(/\W/g, '_') }.clj", """
;; #{ title }
;;
;; #{ description }
;;
;; test cases:
#{ test_cases }
#{ solution }
"""
@echo ">>> got problem #{ number }"
getAllProblems = ->
if currentProblem <= problemCount
getProblem.call @, currentProblem
currentProblem++
@run getAllProblems
else
@echo "downloaded all problems"
@exit()
casper.start 'https://www.4clojure.com/login', ->
@fill 'form[action="/login"]', { user: username, pwd: password }, true
casper.run getAllProblems
@rubysolo
Copy link
Author

usage:

casperjs --ignore-ssl-errors=true 4clojure.coffee USERNAME PASSWORD

@phlipper
Copy link

👍 very nice

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment