aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package.lisp11
-rw-r--r--reporter.lisp33
-rw-r--r--toots.lisp7
-rw-r--r--unhtml.lisp7
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))
diff --git a/toots.lisp b/toots.lisp
index f36c9eb..ed7303d 100644
--- a/toots.lisp
+++ b/toots.lisp
@@ -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)))