added RSS support
This commit is contained in:
parent
56421bc284
commit
1f411891a8
3 changed files with 22 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
### description
|
### description
|
||||||
|
|
||||||
the bot will read the timeline from the specified Twitter/Tumblr accounts, and post it to Mastodon
|
the bot will post the timeline from the specified Twitter/Tumblr accounts and RSS feeds to Mastodon
|
||||||
|
|
||||||
### installation
|
### installation
|
||||||
|
|
||||||
|
@ -30,6 +30,9 @@ the bot will read the timeline from the specified Twitter/Tumblr accounts, and p
|
||||||
:token "XXXX"
|
:token "XXXX"
|
||||||
:token_secret "XXXX"}
|
:token_secret "XXXX"}
|
||||||
:accounts ["cyberpunky.tumblr.com" "scipunk.tumblr.com"]}
|
:accounts ["cyberpunky.tumblr.com" "scipunk.tumblr.com"]}
|
||||||
|
;; add RSS config to follow feeds
|
||||||
|
:rss {"Hacker News" "https://hnrss.org/newest"
|
||||||
|
"r/Clojure" "https://www.reddit.com/r/clojure/.rss"}
|
||||||
:mastodon {:access_token "XXXX"
|
:mastodon {:access_token "XXXX"
|
||||||
:api_url "https://botsin.space/api/v1/"}}
|
:api_url "https://botsin.space/api/v1/"}}
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
["http" :as http]
|
["http" :as http]
|
||||||
["https" :as https]
|
["https" :as https]
|
||||||
["mastodon-api" :as mastodon]
|
["mastodon-api" :as mastodon]
|
||||||
|
["rss-parser" :as rss]
|
||||||
["tumblr" :as tumblr]
|
["tumblr" :as tumblr]
|
||||||
["twitter" :as twitter]))
|
["twitter" :as twitter]))
|
||||||
|
|
||||||
|
@ -97,15 +98,30 @@
|
||||||
(map parse-tweet)
|
(map parse-tweet)
|
||||||
(post-items last-post-time))))
|
(post-items last-post-time))))
|
||||||
|
|
||||||
|
(defn parse-feed [last-post-time parser [title url]]
|
||||||
|
(-> (.parseURL parser url)
|
||||||
|
(.then #(post-items
|
||||||
|
last-post-time
|
||||||
|
(for [{:keys [title isoDate content link]} (-> % js->edn :items)]
|
||||||
|
{:created-at (js/Date. isoDate)
|
||||||
|
:text (str title "\n\n" link)})))))
|
||||||
|
|
||||||
(get-mastodon-timeline
|
(get-mastodon-timeline
|
||||||
(fn [timeline]
|
(fn [timeline]
|
||||||
(let [last-post-time (-> timeline first :created_at (js/Date.))]
|
(let [last-post-time (-> timeline first :created_at (js/Date.))]
|
||||||
|
;;post from Twitter
|
||||||
(when-let [twitter-client (some-> config :twitter :access-keys clj->js twitter.)]
|
(when-let [twitter-client (some-> config :twitter :access-keys clj->js twitter.)]
|
||||||
(doseq [account (-> config :twitter :accounts)]
|
(doseq [account (-> config :twitter :accounts)]
|
||||||
(.get twitter-client
|
(.get twitter-client
|
||||||
"statuses/user_timeline"
|
"statuses/user_timeline"
|
||||||
#js {:screen_name account :include_rts false}
|
#js {:screen_name account :include_rts false}
|
||||||
(post-tweets last-post-time))))
|
(post-tweets last-post-time))))
|
||||||
|
;;post from Tumblr
|
||||||
(when-let [tumblr-oauth (some-> config :tumblr :access-keys clj->js)]
|
(when-let [tumblr-oauth (some-> config :tumblr :access-keys clj->js)]
|
||||||
(when-let [tumblr-client (some-> config :tumblr :accounts first (tumblr/Blog. tumblr-oauth))]
|
(when-let [tumblr-client (some-> config :tumblr :accounts first (tumblr/Blog. tumblr-oauth))]
|
||||||
(.posts tumblr-client #js {:limit 5} (post-tumblrs last-post-time)))))))
|
(.posts tumblr-client #js {:limit 5} (post-tumblrs last-post-time))))
|
||||||
|
;;post from RSS
|
||||||
|
(when-let [feeds (some-> config :rss)]
|
||||||
|
(let [parser (rss.)]
|
||||||
|
(doseq [feed feeds]
|
||||||
|
(parse-feed last-post-time parser feed)))))))
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lumo-cljs": "^1.8.0",
|
"lumo-cljs": "^1.8.0",
|
||||||
"mastodon-api": "1.3.0",
|
"mastodon-api": "1.3.0",
|
||||||
|
"rss-parser": "3.1.2",
|
||||||
"tumblr": "0.4.1",
|
"tumblr": "0.4.1",
|
||||||
"twitter": "1.7.1"
|
"twitter": "1.7.1"
|
||||||
},
|
},
|
||||||
|
|
Reference in a new issue