diff options
author | Gene Pasquet <dev@etenil.net> | 2025-03-13 23:44:19 +0000 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2025-03-23 09:30:09 +0000 |
commit | 5bc74ac762926b4310569963e30cbf85f265dbcb (patch) | |
tree | a7725140020c18c7d8efe802b977e174e3fc28db | |
parent | 3152e0420751a56e1e3a89687a3935f62151a18e (diff) |
Run summarize top statuses
-rw-r--r-- | package.lisp | 11 | ||||
-rw-r--r-- | reporter.lisp | 33 | ||||
-rw-r--r-- | toots.lisp | 7 | ||||
-rw-r--r-- | unhtml.lisp | 7 |
4 files changed, 38 insertions, 20 deletions
diff --git a/package.lisp b/package.lisp index 65a686c..42bb6d9 100644 --- a/package.lisp +++ b/package.lisp @@ -8,7 +8,8 @@ (:export #:get-timeline #:*client* - #:get-status)) + #:get-status + #:post-toot)) (defpackage :phaser.tracker (:use :cl) @@ -20,10 +21,10 @@ (defpackage :phaser.reporter (:use - :common-lisp) + :common-lisp + :phaser.toots) (:import-from :phaser.unhtml #:text-excerpt) (:import-from :phaser.tracker #:track-statuses) - (:import-from :phaser.toots #:*client*) (:export #:reblog-top-statuses)) @@ -34,7 +35,9 @@ #:phaser.toots #:phaser.tracker #:phaser.reporter) - (:shadowing-import-from #:phaser.reporter #:block)) + (:shadowing-import-from #:phaser.reporter #:block) + (:export + #:summarize-and-post-top-statuses)) (dolist (package '(#:phaser.reporter #:phaser.tracker)) (do-symbols (symbol package) diff --git a/reporter.lisp b/reporter.lisp index 48ec0fa..2ebe6b9 100644 --- a/reporter.lisp +++ b/reporter.lisp @@ -34,6 +34,7 @@ (defvar *max-requests* 20) (defvar *top-statuses-to-boost* 10) +(defvar *excerpt-length* 100) (defun outdated-statuses (page) (remove-if @@ -50,10 +51,10 @@ (let* ((max-id (if (null pages) nil (tooter:id (car (last (car pages)))))) - (page (tooter:timeline *client* :home - :limit *timeline-page-size* - :max-id max-id - :min-id min-id)) + (page (get-timeline :timeline :home + :limit *timeline-page-size* + :max-id max-id + :min-id min-id)) (statuses-and-page (if (null pages) (list page) (cons page pages)))) @@ -85,12 +86,20 @@ (defun summarize-top-statuses () (let ((statuses (load-top-statuses))) - (mapcar (lambda (status) - (text-excerpt (tooter:content status))) - statuses))) + (remove-if #'null + (mapcar (lambda (status) + (let ((excerpt (text-excerpt (tooter:content status) *excerpt-length*))) + (if excerpt + (format nil "~a:~%~a" + excerpt + (tooter:url status)) + nil))) + statuses)))) -(defun reblog-top-statuses () - (let ((top-statuses (load-top-statuses))) - (mapc (lambda (status) - (tooter:favourite *client* status)) - top-statuses))) +(defun summarize-and-post-top-statuses () + (let ((summaries (summarize-top-statuses))) + (post-toot (format nil "~{~a~%~%~}" summaries)))) + +(when nil + (summarize-top-statuses) + (summarize-and-post-top-statuses)) @@ -13,8 +13,11 @@ :secret (uiop:getenv "MASTODON_SECRET") :access-token (uiop:getenv "MASTODON_TOKEN"))) -(defun get-timeline (&key (timeline :home)) - (tooter:timeline *client* timeline)) +(defun get-timeline (&key (timeline :home) (limit 10) (max-id nil) (min-id nil)) + (tooter:timeline *client* timeline :limit limit :max-id max-id :min-id min-id)) (defun get-status (id) (tooter:find-status *client* id)) + +(defun post-toot (content) + (tooter:make-status *client* content)) diff --git a/unhtml.lisp b/unhtml.lisp index 18bab64..6579203 100644 --- a/unhtml.lisp +++ b/unhtml.lisp @@ -10,6 +10,9 @@ (loop for c across (plump:child-elements dom) if (node-has-text c) collect c )) -(defun text-excerpt (content length) +(defun text-excerpt (content excerpt-length) (let ((text-nodes (text-children (plump:parse content)))) - (plump:text (first text-nodes)))) + (if text-nodes + (let ((text (plump:text (first text-nodes)))) + (subseq text 0 (min excerpt-length (length text)))) + nil))) |