first step toward transformations

This commit is contained in:
jem 2020-05-29 15:54:32 +02:00
parent 7fa26afde8
commit 21c908ea85
4 changed files with 43 additions and 33 deletions

View file

@ -32,13 +32,7 @@ with later timestamps to avoid duplicate posts. On the first run the timestamp w
{:consumer_key "XXXX" {:consumer_key "XXXX"
:consumer_secret "XXXX" :consumer_secret "XXXX"
:access_token_key "XXXX" :access_token_key "XXXX"
:access_token_secret "XXXX"} :access_token_secret "XXXX"}}
;; optional, defaults to false
:include-replies? false
;; optional, defaults to false
:include-rts? false
;; accounts you wish to mirror
:accounts ["arstechnica" "WIRED"]}
;; add Tumblr config to mirror Tumblr accounts ;; add Tumblr config to mirror Tumblr accounts
:tumblr {:access-keys :tumblr {:access-keys
{:consumer_key "XXXX" {:consumer_key "XXXX"
@ -81,7 +75,16 @@ with later timestamps to avoid duplicate posts. On the first run the timestamp w
;; any posts not matching the regexes will be filtered out ;; any posts not matching the regexes will be filtered out
:keyword-filters [".*clojure.*"] :keyword-filters [".*clojure.*"]
;; Replace Twitter links by Nitter ;; Replace Twitter links by Nitter
:nitter-urls? false}} :nitter-urls? false}
:transform [{:source {:type :twitter-source
;; optional, defaults to false
:include-replies? false
;; optional, defaults to false
:include-rts? false
;; accounts you wish to mirror
:accounts ["arstechnica" "WIRED"]}
:target {}}]
}
``` ```
* the bot looks for `config.edn` at its relative path by default, an alternative location can be specified either using the `MASTODON_BOT_CONFIG` environment variable or passing the path to config as an argument * the bot looks for `config.edn` at its relative path by default, an alternative location can be specified either using the `MASTODON_BOT_CONFIG` environment variable or passing the path to config as an argument

View file

@ -68,12 +68,13 @@
(let [last-post-time (-> timeline first :created_at (js/Date.))] (let [last-post-time (-> timeline first :created_at (js/Date.))]
;;post from Twitter ;;post from Twitter
(when-let [twitter-auth (twitter-auth config)] (when-let [twitter-auth (twitter-auth config)]
(let [{:keys [accounts]} twitter-auth] (let [{:keys [transform]} config]
(doseq [transformation transform]
(transform/tweets-to-mastodon (transform/tweets-to-mastodon
mastodon-auth mastodon-auth
twitter-auth twitter-auth
accounts transformation
last-post-time))) last-post-time))))
;;post from Tumblr ;;post from Tumblr
(when-let [{:keys [access-keys accounts limit]} (:tumblr config)] (when-let [{:keys [access-keys accounts limit]} (:tumblr config)]
(doseq [account accounts] (doseq [account accounts]

View file

@ -73,12 +73,17 @@
(masto/post-items mastodon-config last-post-time))))) (masto/post-items mastodon-config last-post-time)))))
(defn-spec tweets-to-mastodon any? (defn-spec tweets-to-mastodon any?
[mastodon-config masto/mastodon-auth? [mastodon-auth masto/mastodon-auth?
twitter-config twitter/twitter-auth? twitter-auth twitter/twitter-auth?
accounts (s/* string?) transformation ::transformation
last-post-time any?] last-post-time any?]
(let [{:keys [source target]} transformation
{:keys [accounts include-rts? include-replies?]} source]
(doseq [account accounts] (doseq [account accounts]
(println account)
(twitter/user-timeline (twitter/user-timeline
twitter-config twitter-auth
include-rts?
include-replies?
account account
(post-tweets mastodon-config last-post-time)))) (post-tweets mastodon-auth last-post-time)))))

View file

@ -23,8 +23,8 @@
(def twitter-source? (s/keys :req-un [::include-rts? ::include-replies?])) (def twitter-source? (s/keys :req-un [::include-rts? ::include-replies?]))
(defn-spec twitter-client any? (defn-spec twitter-client any?
[twitter-config twitter-auth?] [twitter-auth twitter-auth?]
(let [{:keys [access-keys]} twitter-config] (let [{:keys [access-keys]} twitter-auth]
(try (try
(twitter. (clj->js access-keys)) (twitter. (clj->js access-keys))
(catch js/Error e (catch js/Error e
@ -52,15 +52,16 @@
:media-links (keep #(when (= (:type %) "photo") (:media_url_https %)) media)}) :media-links (keep #(when (= (:type %) "photo") (:media_url_https %)) media)})
(defn-spec user-timeline any? (defn-spec user-timeline any?
[twitter-config twitter-auth? [twitter-auth twitter-auth?
include-rts? ::include-rts?
include-replies? ::include-replies?
account ::account account ::account
callback fn?] callback fn?]
(let [{:keys [include-rts? include-replies?]} twitter-config] (.get (twitter-client twitter-auth)
(.get (twitter-client twitter-config)
"statuses/user_timeline" "statuses/user_timeline"
#js {:screen_name account #js {:screen_name account
:tweet_mode "extended" :tweet_mode "extended"
:include_rts (boolean include-rts?) :include_rts (boolean include-rts?)
:exclude_replies (not (boolean include-replies?))} :exclude_replies (not (boolean include-replies?))}
callback))) callback))