(defparameter *rdsystems* (make-hash-table)) (defun get-rdsystems () (let ((products (loop for letter across "0ABCDEFGHIJKLMNOPQQRSTUVXYZ" for letterpage = (get-url (format nil "http://www.rndsystems.com/molecule_letter.aspx?l=~c" letter)) when (stringp letterpage) append (mapcar 'car (all-matches letterpage "molecule_detail\\.aspx\\?m=(\\d+)" 1)) ))) (loop for product in products for productpage = (unless (gethash (parse-integer product) *rdsystems*) (get-url (format nil "http://www.rndsystems.com/product_results.aspx?m=~a&c=0" product))) do (sleep .002) (when (stringp productpage) (setf (gethash (parse-integer product) *rdsystems*) (all-matches productpage "\\s*(.*?)\\s*\\s*(.*?)\\s*\\s*(.*?)\\s*\\s*(.*?)<" 1 2 3 4 5)))))) (defun write-rdsystems () (with-open-file (f "~/repos/lsw/trunk/hcls/biordf/reagents/rdsystems.txt" :direction :output :if-exists :supersede) (loop for i being the hash-keys of *rdsystems* for entry = (gethash i *rdsystems*) do (print (cons i entry) f)))) (write-rdsystems)