Basic Feed generation now working

This commit is contained in:
Felisp 2023-12-23 03:24:38 +01:00
parent 51345db93f
commit 45d7c671c7

View file

@ -34,7 +34,7 @@
This is done by always making new GUID - (concat thread-number UNIX-time-of-data-update)" This is done by always making new GUID - (concat thread-number UNIX-time-of-data-update)"
[thread time] [thread time]
(assoc thread guid (str (:no thread) (assoc thread :guid (str (:no thread)
"-" "-"
time))) time)))
@ -53,12 +53,15 @@
(let [time-of-generation (System/currentTimeMillis) (let [time-of-generation (System/currentTimeMillis)
guid-fn (if repeat? (fn [x] (new-guid-always x time-of-generation)) guid-fn (if repeat? (fn [x] (new-guid-always x time-of-generation))
update-only-guid) update-only-guid)
cache-start-index (first (indices (fn [x] (>= x chod-treshold)) cache-start-index (first (indices (fn [x] (>= (:chod x) chod-treshold))
@cache/chod-threads-cache)) @cache/chod-threads-cache))
;; So we don't have to search thru everything we have cached ;; So we don't have to search thru everything we have cached
needed-cache-part (subvec @cache/chod-threads-cache cache-start-index) needed-cache-part (subvec @cache/chod-threads-cache cache-start-index) ;Todo: remove that ugly global reference
actuall-matches (keep (fn [t] actuall-matches (keep (fn [t]
(let [title (:title t)] (let [title (:title t)]
;; Todo: Man, wouldn't it be cool to know which querry matched the thread?
;; Would be so much easier for user to figure out why is it showing
;; and it would solve the problem of super long titles (or OPs instead of titles)
(when (some (fn [querry] (when (some (fn [querry]
(s/includes? title querry)) (s/includes? title querry))
query-vec) query-vec)
@ -67,6 +70,27 @@
;; Finally generate and append GUIDs ;; Finally generate and append GUIDs
(map guid-fn actuall-matches))) (map guid-fn actuall-matches)))
(defn thread-to-rss-item
"If I wasnt retarded I could have made the cached version look like
rss item already but what can you do. I'll refactor I promise, I just need this done ASAP" ;Todo: do what the docstring says
[t]
(let [link-url (str "https://boards.4chan.org/mlp/thread/" (:no t))] ; jesus, well I said only /mlp/ is supported now so fuck it
{:title (format "%.2f%% - %s" (:chod t) (:title t))
;; :url link-url <- this is supposed to be for images according to: https://cyber.harvard.edu/rss/rss.html
:description (format "The thread: '%s' has %.2f%% chance of dying" (:title t) (:chod t))
:link link-url
:guid (:guid t)}))
(defn generate-feed
[query-vec chod-treshold repeat?]
(let [items (filter-chod-posts query-vec chod-treshold repeat?)
head {:title "RSS Thread watcher v0.1"
:link "https://tools.treebrary.org/thread-watcher/feed.xml"
:feed-url "https://tools.treebrary.org/thread-watcher/feed.xml"
:description "RSS based thread watcher"}
body (map thread-to-rss-item items)]
(rss/channel-xml head body)))
(defn http-handler (defn http-handler
"Handles HTTP requests, returns generated feed "Handles HTTP requests, returns generated feed
@ -75,6 +99,8 @@
rss-thread-watch.core.CONFIG" rss-thread-watch.core.CONFIG"
[rqst] [rqst]
{:status 200 {:status 200
:header {"Content-Type" "text/html"} ;; There shouldn't be any problems with this mime type but if there are
;; replace with "text/xml", or even better, get RSS reader that is not utter shit
:header {"Content-Type" "application/rss+xml"}
:body "All pony here ^:)"}) :body "All pony here ^:)"})