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))