| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- (in-package #:chatikbot)
- (defparameter +vk-api-url+ "https://api.vk.com/method/~A?v=5.40" "VK.com API endpoint")
- (defun %vk-api-call (method &optional args)
- (handler-case
- (bordeaux-threads:with-timeout (5)
- (let* ((params (loop for (k . v) in args
- when v
- collect (cons
- (princ-to-string k)
- (princ-to-string v))))
- (response (json-request (format nil +vk-api-url+ method)
- :method :post
- :parameters params)))
- (when (aget "error" response)
- (error (aget "error_msg" (aget "error" response))))
- (aget "response" response)))
- (bordeaux-threads:timeout (e)
- (declare (ignore e))
- (error "Timeout"))))
- (defun vk-wall-get (&key owner-id domain offset count filter extended fields)
- (%vk-api-call "wall.get"
- `(("owner_id" . ,owner-id)
- ("domain" . ,domain)
- ("offset" . ,offset)
- ("count" . ,count)
- ("filter" . ,filter)
- ("extended" . ,extended)
- ("fields" . ,fields))))
- (defun vk-get-user-name (id)
- (let ((r (first (%vk-api-call "users.get" `(("user_ids" . ,id))))))
- (format nil "~A ~A" (aget "first_name" r) (aget "last_name" r))))
- (defun vk-get-group-name (id)
- (aget "name" (first (%vk-api-call "groups.getById"
- `(("group_id" . ,(if (numberp id)
- (- id)
- id)))))))
- (defun vk-get-name (id)
- (if (and (numberp id) (> id 0))
- (vk-get-user-name id)
- (vk-get-group-name id)))
|