finance.lisp 892 B

123456789101112131415161718192021
  1. (in-package #:chatikbot)
  2. (defparameter +yahoo-url+ "https://query.yahooapis.com/v1/public/yql" "Yahoo Finance API endpoint")
  3. (defparameter +yahoo-query+ "select Name,Rate from yahoo.finance.xchange where pair in (~{\"~A\"~^,~})")
  4. (defvar *rate-pairs* '("USDRUB" "EURRUB"))
  5. (defun get-rates (&optional (pairs *rate-pairs*))
  6. (let ((response (yason:parse
  7. (flexi-streams:octets-to-string
  8. (drakma:http-request +yahoo-url+
  9. :parameters (append '(("format" . "json")
  10. ("env" . "store://datatables.org/alltableswithkeys"))
  11. (list (cons "q" (format nil +yahoo-query+ pairs)))))
  12. :external-format :utf-8)
  13. :object-as :alist)))
  14. (when (aget "error" response)
  15. (error "Error in rates request"))
  16. (loop for rate in (aget "rate" (aget "results" (aget "query" response)))
  17. collect (cons (aget "Name" rate)
  18. (aget "Rate" rate)))))