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