Kevin De Baerdemaeker

Org Media DB Capture Template

Modified 2023-11-11

Use plz package to query

JSON

(let ((searchQuery (read-string "Contains: ")))
  (message "%s" (plz 'get (concat "https://v2.jokeapi.dev/joke/Any?contains=" "shit"))))
{
    "error": false,
    "category": "Programming",
    "type": "twopart",
    "setup": "How do you know God is a shitty programmer?",
    "delivery": "He wrote the OS for an entire universe, but didn't leave a single useful comment.",
    "flags": {
        "nsfw": false,
        "religious": true,
        "political": false,
        "racist": false,
        "sexist": false,
        "explicit": true
    },
    "id": 19,
    "safe": false,
    "lang": "en"
}

Parsed JSON

(let ((searchQuery (read-string "Contains: ")))
  (message "%s" (plz 'get (concat "https://v2.jokeapi.dev/joke/Any?contains=" searchQuery) :as #'json-read)))
((error . :json-false) (category . Programming) (type . twopart) (setup . How do you know God is a shitty programmer?) (delivery . He wrote the OS for an entire universe, but didn't leave a single useful comment.) (flags (nsfw . :json-false) (religious . t) (political . :json-false) (racist . :json-false) (sexist . :json-false) (explicit . t)) (id . 19) (safe . :json-false) (lang . en))

Searching a key from the alist

(let* ((searchQuery (read-string "Contains: "))
      (result (plz 'get (concat "https://v2.jokeapi.dev/joke/Any?contains=" searchQuery) :as #'json-read)))
  (message "%s" (alist-get 'flags result)))
((nsfw . :json-false) (religious . :json-false) (political . t) (racist . :json-false) (sexist . :json-false) (explicit . t))

Searching inside a JSON list after parsing

(let* ((result (plz 'get "https://fakerapi.it/api/v1/addresses?_quantity=2" :as #'json-read))
       (data (alist-get 'data result)))
  (seq-filter (lambda (elt) (message "%s" (alist-get 'streetName elt))) data))
(id . 1)(street . 763 Hagenes Shoals)(streetName . Howell Shores)(buildingNumber . 762)(city . Jacobsberg)(zipcode . 88677-4430)(country . Brunei Darussalam)(countycode . SZ)(latitude . -71.442838)(longitude . -67.682075)
(id . 2)(street . 136 Schinner Bypass)(streetName . Ambrose Fields)(buildingNumber . 7017)(city . West Ernesto)(zipcode . 82744-6312)(country . Niue)(countycode . MZ)(latitude . -65.656648)(longitude . 61.263232)

Search Game from Steam App List

(defun mytestfornow (steamJSON)
    (let* ((searchQuery (read-string "Contains: "))
           (data (alist-get 'apps (alist-get 'applist steamJSON)))
           (filtered (seq-take (seq-filter (lambda (elt)
                              (s-contains?
                               (downcase searchQuery)
                               (downcase (alist-get 'name elt))))
                            data) 10))
      (confirmed (completing-read "Hi: " (mapcar (lambda (x) (alist-get 'name x)) filtered))))


  (message "%S" (seq-find (lambda (x) (string= (alist-get 'name x) confirmed)) filtered))))

(message "Requesting all games from Steam...")
(plz 'get "https://api.steampowered.com/ISteamApps/GetAppList/v0002/?format=json"
                :as #'json-read
                :then (lambda (steamJSON) (mytestfornow steamJSON))
                :else (lambda (alist)
                        (error "Result: %s" (plz-error-message alist))))

#<process plz-request-curl>

(message "%S" (completing-read "Hello: " (list "Test" "Fourtien")))
("Test" "Fourtien")

Getting keywords

(defun get-keywords-from-file (path)
  (with-temp-buffer
    (insert-file-contents path)
    (delay-mode-hooks (org-mode))
    (org-element-map (org-element-parse-buffer 'element) 'keyword
      (lambda (keyword) (cons (org-element-property :key keyword)
                              (org-element-property :value keyword))))))

(with-temp-buffer
  (dolist (path (delete "./index.org" (directory-files-recursively "." ".org")))
    (insert (format "- [[file:%s][%s]] /%s/\n"
          (file-relative-name path)
          (cdr (assoc "TITLE" (get-keywords-from-file path)))
          (cdr (assoc "DATE" (get-keywords-from-file path)))
          )))
  (buffer-string))

References