summaryrefslogtreecommitdiff
path: root/lisp/my-cheeseboard.el
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2023-06-01 19:35:59 -0700
committerFranck Cuny <franck@fcuny.net>2023-06-01 19:35:59 -0700
commita187752c824b47052d33d3bc12749b5a7d2e8191 (patch)
treed939397496dcae8a7634a93b159fab57ee1752ec /lisp/my-cheeseboard.el
parentelfeed: add more feeds (diff)
downloademacs.d-a187752c824b47052d33d3bc12749b5a7d2e8191.tar.gz
🤡
Change-Id: I06b104d79deac199f9cd9cdae705e333d23cc852
Diffstat (limited to 'lisp/my-cheeseboard.el')
-rw-r--r--lisp/my-cheeseboard.el55
1 files changed, 55 insertions, 0 deletions
diff --git a/lisp/my-cheeseboard.el b/lisp/my-cheeseboard.el
new file mode 100644
index 0000000..9713e14
--- /dev/null
+++ b/lisp/my-cheeseboard.el
@@ -0,0 +1,55 @@
+;;; my-cheeseboard.el --- summary -*- lexical-binding: t -*-
+;; Author: Franck Cuny <franck@fcuny.net>
+
+;;; Commentary:
+
+;; commentary:
+;; As everybody knows, the best pizza in the world is at
+;; cheeseboard[0]. I like to check during the week the pizzas for the
+;; week and see if there are any we would like to have. This module
+;; gets the list of pizzas for the week and display them in a buffer.
+;;
+;; [0] https://cheeseboardcollective.coop/
+
+;;; Code:
+
+(require 'dom)
+
+(defconst my/cheeseboard-buffer "*cheeseboard-menu*"
+ "Name of the buffer for displaying the week's menu.")
+
+(defconst my/cheeseboard-url "https://cheeseboardcollective.coop/pizza/"
+ "URL to fetch to get the list of pizzas for the week.")
+
+(defun my/cheeseboard-menu ()
+ "Display the list of pizzas for the week."
+ (interactive)
+ (let* ((dom (with-current-buffer (url-retrieve-synchronously my/cheeseboard-url)
+ (libxml-parse-html-region (point-min) (point-max))))
+ ;; a class named `pizza-list' contains all the items for the
+ ;; week. they are wrapped in a `article' tag.
+ (menus (dom-by-tag (dom-by-class dom "pizza-list") 'article))
+ (inhibit-read-only t)
+ (buffer-undo-list t))
+ (pop-to-buffer my/cheeseboard-buffer)
+ (erase-buffer)
+ (insert (format "if you want to look at the menu on the website => %s\n\n" my/cheeseboard-url))
+ (dolist (menu menus)
+ (my/pizza-of-the-day menu))
+ (special-mode)))
+
+(defun my/pizza-of-the-day (menu)
+ "Print the pizzas for the day from the MENU."
+ (let* ((date (car (dom-strings (dom-by-tag (dom-by-class menu "date") 'p))))
+ (pizza (dom-by-tag (dom-by-class menu "menu") 'p)))
+ (if (string= "The pizzeria is closed today." (nth 0 (dom-strings pizza)))
+ (insert (format "%s: cheeseboard is closed :(\n\n" (propertize date 'face 'italic)))
+ (insert (format "%s: 🍕 %s\n(note: %s, %s)\n\n"
+ (propertize date 'face 'italic)
+ (propertize (replace-regexp-in-string "\n" "" (nth 2 (dom-strings pizza))) 'face 'highlight)
+ (nth 0 (dom-strings pizza))
+ (nth 1 (dom-strings pizza)))))))
+
+(provide 'my-cheeseboard)
+
+;;; my-cheeseboard.el ends here