1
0

yit.lisp 1.5 KB

123456789101112131415161718192021222324252627282930
  1. (in-package :cl-user)
  2. (defpackage chatikbot.plugins.yit
  3. (:use :cl :chatikbot.common))
  4. (in-package :chatikbot.plugins.yit)
  5. (defun yit-info ()
  6. (labels ((get-rows (url)
  7. (rest (get-by-tag (plump:get-element-by-id (xml-request url) "apartmentList") "tr")))
  8. (row-data (row)
  9. (mapcar (lambda (e) (string-trim '(#\Newline #\Space) (plump:text e)))
  10. (get-by-tag row "td")))
  11. (format-data (data)
  12. (format nil "~{~A~^ ~}" (mapcar (lambda (n) (nth n data)) '(1 2 3 4 7 6))))
  13. (get-intresting (rows)
  14. (loop for row in rows
  15. for data = (row-data row)
  16. for rooms = (parse-integer (nth 2 data))
  17. for area = (parse-float:parse-float (replace-all (nth 3 data) "," "."))
  18. when (= rooms 3)
  19. when (< 65 area 75)
  20. collect data))
  21. (format-apts (url)
  22. (let ((apts (get-intresting (get-rows url))))
  23. (format nil "~A~%~{~A~^~%~}~%~A/~A" url (mapcar #'format-data apts)
  24. (length (remove "забронировано" apts :test #'equal :key #'(lambda (r) (nth 7 r)) ))
  25. (length apts)))))
  26. (format nil "~{~A~^~%~%~}"
  27. (mapcar #'format-apts
  28. '("http://www.yitspb.ru/yit_spb/catalog/apartments/novoorlovskiy-korpus-1-1-1"
  29. "http://www.yitspb.ru/yit_spb/catalog/apartments/novoorlovskiy-korpus-1-1-2")))))