diff --git a/eg/twisted/get-page.hy b/eg/twisted/get-page.hy new file mode 100644 index 0000000..3d8e4ce --- /dev/null +++ b/eg/twisted/get-page.hy @@ -0,0 +1,45 @@ +;; To run this example, do the following: +;; $ hy get-page.hy http://docs.hylang.org/en/latest/ +;; +;; At which point, you should see output like this: +;; 2013-06-24 23:03:57-0700 [-] Log opened. +;; 2013-06-24 23:03:57-0700 [-] Starting factory +;; 2013-06-24 23:03:57-0700 [HTTPPageGetter,client] Byte count for the content of the HTTP page passed: 11835 +;; 2013-06-24 23:03:57-0700 [HTTPPageGetter,client] Preparing to stop reactor ... +;; 2013-06-24 23:03:57-0700 [HTTPPageGetter,client] Stopping factory +;; 2013-06-24 23:03:57-0700 [-] Main loop terminated. +(import sys) + +(import [twisted.web.client [getPage]] + [twisted.internet [reactor]] + [twisted.python [log]]) + +(defun get-page-size (result) + (print + (+ "Byte count for the content of the HTTP page passed: " + (str (len result))))) + +(defun log-error (err) + (log.msg err)) + +(defun finish (ignore) + (log.msg "Preparing to stop reactor ...") + (reactor.stop)) + +(defun get-page (url) + (let ((d (getPage url))) + (d.addCallback get-page-size) + (d.addErrback log-error) + (d.addCallback finish))) + +(defun caddr (list) + ; This is how you'd do this in CL: + ;(car (cdr (cdr list)))) + ; However, I think this is more efficient in hy: + (get list 2)) + +(if (= __name__ "__main__") + (do + (log.startLogging sys.stdout) + (get-page (caddr sys.argv)) + (reactor.run)))