1
0

vk.lisp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. (in-package #:chatikbot)
  2. (defparameter +vk-api-url+ "https://api.vk.com/method/~A?v=5.34" "VK.com API endpoint")
  3. (defun %vk-api-call (method &optional args)
  4. (handler-case
  5. (bordeaux-threads:with-timeout (5)
  6. (let* ((params (loop for (k . v) in args
  7. when v
  8. collect (cons
  9. (princ-to-string k)
  10. (princ-to-string v))))
  11. (response (yason:parse
  12. (flex:make-flexi-stream
  13. (drakma:http-request (format nil +vk-api-url+ method)
  14. :method :post
  15. :parameters params
  16. :external-format-out :utf-8
  17. :force-binary t
  18. :want-stream t
  19. :decode-content t)
  20. :external-format :utf-8)
  21. :object-as :alist)))
  22. (when (aget "error" response)
  23. (error (aget "error_msg" (aget "error" response))))
  24. (aget "response" response)))
  25. (bordeaux-threads:timeout (e)
  26. (declare (ignore e))
  27. (error "Timeout"))))
  28. (defun vk-wall-get (&key owner-id domain offset count filter extended)
  29. (%vk-api-call "wall.get"
  30. (list (cons "owner_id" owner-id)
  31. (cons "domain" domain)
  32. (cons "offset" offset)
  33. (cons "count" count)
  34. (cons "filter" filter)
  35. (cons "extended" extended))))