google.lisp 1.1 KB

123456789101112131415161718192021222324252627
  1. (in-package #:chatikbot)
  2. (defparameter +google-search-url+ "http://www.google.com/search")
  3. (defun google-search (query)
  4. (loop
  5. for result across (clss:select ".g" (xml-request +google-search-url+
  6. :parameters (list (cons "q" query))))
  7. for a = (elt (clss:select ".r>a" result) 0)
  8. for uri = (quri:uri (plump:get-attribute a "href"))
  9. for q = (aget "q" (quri:url-decode-params (quri:uri-query uri)))
  10. when q
  11. collect (list
  12. (cons :url q)
  13. (cons :title (select-text "*" a))
  14. (cons :desc (select-text ".st" result)))))
  15. (defun google-format-search-results (results)
  16. (format nil "~{~A. ~A~^~%~}"
  17. (loop for i from 1
  18. for result in results
  19. append (list i
  20. (format nil "[~A](~A)~@[~% ~A~]"
  21. (aget :title result)
  22. (aget :url result)
  23. (replace-all (aget :desc result)
  24. '(#\Newline) ""))))))