Bypass paywalled APIs to crosspost from Twitter to Mastodon
imgs | ||
node_modules/tall | ||
ref | ||
.gitignore | ||
api_license.png | ||
config.txt | ||
multi.js | ||
package.json | ||
README.md | ||
TwitToMast.js | ||
usage.txt | ||
usernameslist.txt |
TwitToMast
Bypass paywalled APIs to crosspost from Twitter to Mastodon
Installation:
- Clone the repo and set up the script's dependencies
git clone https://github.com/pogmom/TwitToMast.git
cd TwitToMast
npm install
-
Install Chrome Webdriver and set up your PATH as outlined in Step 3 here
-
Retrieve your Mastodon API Key
- From your Mastodon Account, go to Preferences > Development > New Application
- Enter any name you'd like, press "submit"
- You should see the application with the name you just gave it in your applications list
- Click on its name, and copy the string of text to the right of where it says "Your Access Token"
-
Update config.txt with your Mastodon account settings
- Replace "API_KEY" on line 1 with the Access Token you retrieved in the previous step
- Replace "API_URL" on line 2 with your Mastodon instance's API URL
- This will look like "https://mastodon.social/api/v1/", replacing "mastodon.social" with the domain you registered your account through
Usage
node ./TwitToMast.js [-htqrpmbc] [-u username] [-n tweetcount] [-d debuglevel] [-w timeout]
node ./multi.js [-htqrpmbc] [-n tweetcount] [-d debuglevel] [-w timeout]
Arguments
-h: - show help screen (you made it here!)
-u: username
- the twitter handle of the user whose account will be scraped
- defaults to 'Twitter' (@twitter)
-n: tweetcount
- the number of enabled tweets that will be scraped from the targeted account
- defaults to 5
-t: - tweets that are part of threads will be included in the scan
-q: - quote tweets will be included in the scan
-r: - Link to quoted tweet will appear in the header, preceded by "re: "
- default behavior posts link at bottom preceded by "Quoting "
-p: - enable/disable posting to Mastodon
-m: - include user's name, handle, and link to tweet
-b: - display browser (disable headless mode)
-c: - force URL to be logged to file if posts are disabled
-d: debuglevel
- amount of information to print to console
0: only errors
1: current task + tweet Text (default)
2: pretty much everything
-w: timeout
- length of time (in ms) to wait for page elements to load
- defaults to 30000 (30 seconds)
Example of single-user scraper
How types of content are handled
- Text
- All text (except emojis) is currently included in cross-posts
- Quote Tweets
- Preserves text of quote tweet and allows
- Media
- All still images attached to a tweet will be included in cross-posts
- Videos are unable to be attached to cross-posts, but a link to the original video will be included
- Retweets
- Retweets are not cross-posted
- Replies
- To self:
- Preserves Text, links, still images, quoted content, and continuity (mastodon post are stitched together in threads)
- To others:
- Replies to others are not cross-posted at the moment
- To self:
Q&A
Q. why isn't it staying open in the background to monitor my tweets?
A. TwitToMast doesn't run perpetually by default. You'll need to set it up yourself to run on a schedule.
- On macos, you can run the script every 10 minutes with the following command in an automator app set up to run at login.
zsh -c "cd /path/to/repository/TwitToMast && exec screen -DmS twittercrosspost zsh -c 'while true; do /path/to/node ./TwitToMast.js [username] [tweet count] [debug level] & sleep 600; done'"
- You can connect to the created screen to monitor the output of the script with
screen -ls
andscreen -r [screenid]
- Windows users, try this
- If you're on linux, you probably already know what you're doing
Q. Doesn't bypassing Twitter's API violate their TOS?
A. No, elon musk personally gave me the go-ahead to do this.