2020-04-05 08:37:54 +00:00
|
|
|
# Twoot
|
|
|
|
|
|
|
|
Twoot is a python script that extracts tweets from a twitter feed and
|
|
|
|
reposts them as toots on a Mastodon account.
|
|
|
|
|
2022-08-22 06:59:22 +00:00
|
|
|
**UPDATE 22 AUG 2022** Fixed bug that would incorrectly mark a new tweet
|
|
|
|
as a "reply to" if it quoted a tweet that is a reply-to.
|
|
|
|
|
2021-06-01 10:01:05 +00:00
|
|
|
**UPDATE 01 JUN 2021** Added command line argument (`-c`) to limit the
|
|
|
|
number of toots posted on the mastodon account.
|
|
|
|
|
2020-12-19 09:30:19 +00:00
|
|
|
**UPDATE 19 DEC 2020** VERSION 2.0 Twitter's *no-javascript* version
|
|
|
|
has been retired. Twoot has been rewritten to get content from
|
|
|
|
[nitter.net](https://nitter.net) which is a javascript-free mirror of
|
|
|
|
twitter. As a bonus (or a curse?) twoot now also supports animated GIFs.
|
2019-08-01 14:03:24 +00:00
|
|
|
|
2020-04-05 08:37:54 +00:00
|
|
|
**UPDATE 05 APR 2020** VERSION 1.0. Twoot can now optionally download
|
|
|
|
videos from Twitter and upload them on Mastodon.
|
|
|
|
|
2020-03-17 14:19:06 +00:00
|
|
|
**UPDATE 17 MAR 2020** Added command line switch (`-r`) to also post
|
|
|
|
reply-to tweets on the mastodon account. They will not be included by
|
|
|
|
default anymore.
|
|
|
|
|
2020-03-06 17:02:21 +00:00
|
|
|
**UPDATE 06 MAR 2020** Added functionality to automatically get images
|
2020-03-06 16:54:48 +00:00
|
|
|
from tweets considered as "sensitive content"
|
|
|
|
|
2020-03-06 17:02:21 +00:00
|
|
|
**UPDATE 15 FEB 2020** Twoot has been rewritten to make use of the
|
2020-02-15 15:06:15 +00:00
|
|
|
mobile twitter page without JavaScript after the breaking change
|
|
|
|
of last week.
|
|
|
|
|
2019-08-01 14:03:24 +00:00
|
|
|
# Features
|
|
|
|
|
|
|
|
* Fetch timeline of given users from twitter.com
|
|
|
|
* Scrape html and formats tweets for post on mastodon
|
|
|
|
* Emojis supported
|
2020-03-28 10:33:38 +00:00
|
|
|
* Optionally upload videos from tweet to Mastodon
|
|
|
|
* Upload images from tweet to Mastodon
|
2019-08-01 14:03:24 +00:00
|
|
|
* Specify maximum age of tweet to be considered
|
|
|
|
* Specify minimum delay before considering a tweet for upload
|
|
|
|
* Remember tweets already tooted to prevent double posting
|
2020-03-28 10:33:38 +00:00
|
|
|
* Optionally post reply-to tweets on the mastodon account
|
2019-08-01 14:03:24 +00:00
|
|
|
|
|
|
|
# usage
|
|
|
|
|
|
|
|
```
|
2021-06-01 09:57:13 +00:00
|
|
|
twoot.py [-h] -t <twitter account> -i <mastodon instance> -m <mastodon account>
|
|
|
|
-p <mastodon password> [-r] [-v] [-a <max age in days)>]
|
|
|
|
[-d <min delay (in mins>] [-c <max # of toots to post>]
|
2019-08-01 14:03:24 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
# arguments
|
|
|
|
|
2019-08-01 14:18:15 +00:00
|
|
|
Assuming that the Twitter handle is @SuperDuperBot and the Mastodon account
|
|
|
|
is @superduperbot@botsin.space
|
2019-08-01 14:03:24 +00:00
|
|
|
|
2019-08-01 14:13:41 +00:00
|
|
|
|Switch |Description | Example | Req |
|
|
|
|
|-------|--------------------------------------------------|--------------------|-----|
|
2020-10-14 19:51:00 +00:00
|
|
|
| -t | twitter account name without '@' | `SuperDuper` | Yes |
|
2019-08-01 14:13:41 +00:00
|
|
|
| -i | Mastodon instance domain name | `botsin.space` | Yes |
|
2019-08-01 14:16:37 +00:00
|
|
|
| -m | Mastodon username | `superduperbot` | Yes |
|
2019-08-01 14:13:41 +00:00
|
|
|
| -p | Mastodon password | `my_Sup3r-S4f3*pw` | Yes |
|
2020-03-28 10:33:38 +00:00
|
|
|
| -v | upload videos to Mastodon | *N/A* | No |
|
2020-03-17 14:19:06 +00:00
|
|
|
| -r | Post reply-to tweets (ignored by default) | *N/A* | No |
|
2020-03-29 11:57:18 +00:00
|
|
|
| -a | Max. age of tweet to post (in days) | `5` | No |
|
2019-08-01 14:13:41 +00:00
|
|
|
| -d | Min. delay before posting new tweet (in minutes) | `15` | No |
|
2021-06-01 09:57:13 +00:00
|
|
|
| -c | Max number of toots allowed to post (cap) | `1` | No |
|
2019-08-01 14:03:24 +00:00
|
|
|
|
2020-03-28 10:33:38 +00:00
|
|
|
When using the `-v` switch consider:
|
2020-03-29 11:57:18 +00:00
|
|
|
* whether the copyright of the content that you want to cross-post allows it
|
|
|
|
* the storage / transfer limitations of the Mastodon instance that you are posting to
|
|
|
|
* the upstream bandwidth that you may consume on your internet connection
|
2020-03-28 10:33:38 +00:00
|
|
|
|
2019-08-01 14:03:24 +00:00
|
|
|
Default max age is 1 day. Decimal values are OK.
|
|
|
|
|
2019-08-01 14:13:41 +00:00
|
|
|
Default min delay is 0 minutes.
|
|
|
|
|
|
|
|
# installation
|
|
|
|
|
2019-08-01 15:17:47 +00:00
|
|
|
Make sure python3 is installed.
|
2019-08-01 14:13:41 +00:00
|
|
|
|
2020-03-29 11:57:18 +00:00
|
|
|
Twoot depends on `beautifulsoup4` and `Mastodon.py` python modules.
|
2020-03-28 10:47:53 +00:00
|
|
|
|
2020-04-05 08:37:54 +00:00
|
|
|
**Only If you plan to download videos** with the `-v` switch, are the additional dependencies required:
|
2020-03-29 11:57:18 +00:00
|
|
|
* Python modules `m3u8` and `ffmpeg-python`
|
2020-04-05 08:37:54 +00:00
|
|
|
* [ffmpeg](https://ffmpeg.org/download.html) (installed with the package manager of your distribution)
|
2019-08-01 14:13:41 +00:00
|
|
|
|
2020-03-29 11:57:18 +00:00
|
|
|
```
|
|
|
|
> pip install beautifulsoup4 Mastodon.py m3u8 ffmpeg-python
|
|
|
|
```
|
2019-08-01 15:17:47 +00:00
|
|
|
In your user folder, execute `git clone https://gitlab.com/jeancf/twoot.git`
|
|
|
|
to clone repo with twoot.py script.
|
|
|
|
|
|
|
|
Add command line to crontab. For example, to run every 15 minutes starting at minute 1 of every hour
|
2019-08-01 14:13:41 +00:00
|
|
|
and process the tweets posted in the last 5 days but at least 15 minutes
|
|
|
|
ago:
|
|
|
|
|
|
|
|
```
|
2019-08-01 14:16:37 +00:00
|
|
|
1-59/15 * * * * /path/to/twoot.py -t SuperDuperBot -i botsin.space -m superduperbot -p my_Sup3r-S4f3*pw -a 5 -d 15
|
2020-02-15 15:06:15 +00:00
|
|
|
```
|
2020-12-19 09:30:19 +00:00
|
|
|
|
|
|
|
# Background
|
|
|
|
I started twoot when [tootbot](https://github.com/cquest/tootbot)
|
|
|
|
stopped working. Tootbot relies on rss feeds from https://twitrss.me
|
2020-12-19 10:47:33 +00:00
|
|
|
that broke when Twitter refreshed their web UI in July 2019.
|