Philosophical Research:RatingHub/YT/swcclectures2031
Appearance
Program
;;;; # channel @swcclectures2031 (asdf:load-system "channel-rating") (defpackage :reversedragon3.rating.swcc-lectures (:shadowing-import-from :reversedragon3.rating #:rating) (:use :common-lisp)) (in-package :reversedragon3.rating.swcc-lectures) ;; before I forget again - these lectures are from Tsinghua University by Associate Professor Feng Wuzhong at the School of Marxism. I always forget his name for unknown reasons (defun main () (let (likes dislikes num-likes num-dislikes) (setq likes (append (list ; regular 'GxbKOjXnE-0 'TYlLBGbqrxI "HI-0m8PB_NE" 'TxiNbKDzTIM 'Wa4BL0LI-0o 'ZpNZx2UvLTM 'DcA52cQR-rM 'HEjODjnfq-o '6Umh4WBdmTk 'jne1iyQv2No 'vGFUAB3-GRY '-mXRNDec06E 'DpIlhFUFqPs '53IYYrEia9I 'uLoaPivZa6M 'fgsH898PRDw "c_SdOf-DNEI" '90UKrrp5JG4 'lf3VW9wzl1g 'LFDmtTIa6UI 'rkI2NEPNOi0 "zt_ca5xr6q0" "4_x4Mv6Utm4" 'Y3a7TRsCbDM 'bP-Vp8gWDd0 'LfzJnLPwyUw 'HwonrsZ8R7o 'n8Lor36nT8o 'VainzFGFnLA '62mvMWJHt8g 'cPYoq9Nb2bA ;; chapter 4 ) nil) ;;dislikes (append ;; nil ;; nil) ) (rating likes dislikes) )) (print (main)) ;; :: cr. 2023-11-06T09:53:06Z ;; :: ed. 2024-04-16T21:57:23Z ;; date began 'serious review' by chapter
Lisp library
;;; toolkit for rating-sheets (defpackage :reversedragon3.rating (:use :common-lisp) ;; (:local-nicknames ) (:export ;; #:nearest-pow10 #:deduplicate #:rating #:stylesheet )) (in-package :reversedragon3.rating) (defun nearest-pow10 (value) ; round up to nearest power of 10, such as 70 -> 100 (expt 10 (ceiling (expt value (/ 1 10))))) (defun deduplicate (list) (let ((known-id (make-hash-table :test 'equal)) result canonical stored) (dolist (item list) (setq canonical (if (stringp item) item (symbol-name item)) stored (gethash (string-upcase canonical) known-id)) (cond ((equal canonical stored) (format t "Item ~a matched known item ~a~%" canonical stored)) (t (setf (gethash (string-upcase canonical) known-id) canonical result (cons canonical result)) )) (setq stored nil canonical nil)) (reverse result))) (defun rating (likes dislikes &optional neutral) (setq likes (deduplicate likes) dislikes (deduplicate dislikes) neutral (deduplicate neutral)) (let* ( (num-likes (length likes)) (num-dislikes (length dislikes)) (total (+ num-likes num-dislikes (length neutral))) (percentage-likes (truncate (* (nearest-pow10 total) (/ num-likes total)))) (percentage-dislikes (truncate (* (nearest-pow10 total) (/ num-dislikes total)))) ) (list num-likes num-dislikes percentage-likes percentage-dislikes))) (defun stylesheet (videos) (let ((result (make-string-output-stream))) (format result ".unlikely-dummy-item~%") (dolist (item videos) (format result ", .watch-active-metadata[video-id=\"~A\" i] div, a.ytd-rich-grid-media[href*=\"~A\" i]~%" item item)) (format result "{ background-color: #9f9ff7; }~%~%.watch-active-metadata div * { background-color: transparent !important; }") (get-output-stream-string result)))
[Note: it's been a while since this code has been tested, so I do not know if it works.]