mirror of
https://gitlab.com/jeancf/twoot.git
synced 2025-02-22 16:22:12 +00:00
Merge branch 'susbt' of https://gitlab.com/jeancf/twoot into susbt
This commit is contained in:
commit
837013b4ca
|
@ -1,3 +1,5 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
**23 NOV 2022** VERSION 2.5 Added command-line option (-l) to remove
|
**23 NOV 2022** VERSION 2.5 Added command-line option (-l) to remove
|
||||||
redirection from links included in tweets. Obfuscated links are replaced
|
redirection from links included in tweets. Obfuscated links are replaced
|
||||||
by the URL that the resource is directly downloaded from. Also improved
|
by the URL that the resource is directly downloaded from. Also improved
|
||||||
|
|
14
README.md
14
README.md
|
@ -5,7 +5,7 @@ It is simple to set-up on a local machine, configurable and feature-rich.
|
||||||
|
|
||||||
**UPDATE XX DEC 2022** VERSION 3.0 brings some important changes and new features:
|
**UPDATE XX DEC 2022** VERSION 3.0 brings some important changes and new features:
|
||||||
|
|
||||||
* **If you are using a version of python < 3.11 you need to install the `tomli` module**
|
* Only potentially breaking change: **If you are using a version of python < 3.11 you need to install the `tomli` module**
|
||||||
* Twoot can be configured with a config file in [TOML](https://toml.io/) format. Check `default.toml` for details
|
* Twoot can be configured with a config file in [TOML](https://toml.io/) format. Check `default.toml` for details
|
||||||
* Domain susbtitution can be configured in the config file to replace links to Twitter, Youtube and
|
* Domain susbtitution can be configured in the config file to replace links to Twitter, Youtube and
|
||||||
Reddit domains with alternatives (e.g. [Nitter](https://github.com/zedeus/nitter/wiki/Instances),
|
Reddit domains with alternatives (e.g. [Nitter](https://github.com/zedeus/nitter/wiki/Instances),
|
||||||
|
@ -14,6 +14,7 @@ It is simple to set-up on a local machine, configurable and feature-rich.
|
||||||
* Added option to not add reference to "Original tweet" at the bottom of toots
|
* Added option to not add reference to "Original tweet" at the bottom of toots
|
||||||
* A password must be provided with `-p` for the first run only. After that it is no longer required.
|
* A password must be provided with `-p` for the first run only. After that it is no longer required.
|
||||||
* The verbosity of logging messages can be set in the config file with `log_level=`.
|
* The verbosity of logging messages can be set in the config file with `log_level=`.
|
||||||
|
* Config file option `log_days =` specifies how long to keep log messages in file. Older messages are deleted.
|
||||||
|
|
||||||
> Previous updates can be found in CHANGELOG.
|
> Previous updates can be found in CHANGELOG.
|
||||||
|
|
||||||
|
@ -33,9 +34,12 @@ It is simple to set-up on a local machine, configurable and feature-rich.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
twoot.py [-h] [-f <.toml config file>] [-t <twitter account>] [-i <mastodon instance>]
|
```sh
|
||||||
[-m <mastodon account>] [-p <mastodon password>] [-r] [-s] [-l] [-u] [-v] [-o]
|
twoot.py [-h] [-f <.toml config file>] [-t <twitter account>] [-i <mastodon instance>]
|
||||||
[-a <max age in days)>] [-d <min delay (in mins>] [-c <max # of toots to post>]
|
[-m <mastodon account>] [-p <mastodon password>] [-r] [-s] [-l] [-u] [-v] [-o]
|
||||||
|
[-a <max age in days)>] [-d <min delay (in mins>] [-c <max # of toots to post>]
|
||||||
|
```
|
||||||
|
|
||||||
## Arguments
|
## Arguments
|
||||||
|
|
||||||
Assuming that the Twitter handle is @SuperDuperBot and the Mastodon account
|
Assuming that the Twitter handle is @SuperDuperBot and the Mastodon account
|
||||||
|
@ -107,7 +111,7 @@ a version of python < 3.11 you also need to install the `tomli` module.
|
||||||
* [ffmpeg](https://ffmpeg.org/download.html) (installed with the package manager of your distribution)
|
* [ffmpeg](https://ffmpeg.org/download.html) (installed with the package manager of your distribution)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pip install beautifulsoup4 Mastodon.py youtube-dl2
|
pip install beautifulsoup4 Mastodon.py youtube-dl2
|
||||||
```
|
```
|
||||||
|
|
||||||
In your user folder, execute `git clone https://gitlab.com/jeancf/twoot.git`
|
In your user folder, execute `git clone https://gitlab.com/jeancf/twoot.git`
|
||||||
|
|
87
twoot.py
87
twoot.py
|
@ -539,10 +539,57 @@ def login(password):
|
||||||
def terminate(exit_code):
|
def terminate(exit_code):
|
||||||
"""
|
"""
|
||||||
Cleanly stop execution with a message on execution duration
|
Cleanly stop execution with a message on execution duration
|
||||||
|
Remove log messages older that duration specified in config from log file
|
||||||
:param exit_code: return value to pass to shell when exiting
|
:param exit_code: return value to pass to shell when exiting
|
||||||
"""
|
"""
|
||||||
logging.info('Run time : {t:2.1f} seconds.'.format(t=time.time() - START_TIME))
|
logging.info('Run time : {t:2.1f} seconds.'.format(t=time.time() - START_TIME))
|
||||||
logging.info('_____________________________________________________________________________________')
|
logging.info('_____________________________________________________________________________________')
|
||||||
|
|
||||||
|
# Close logger and log file
|
||||||
|
logging.shutdown()
|
||||||
|
|
||||||
|
# Remove older log messages
|
||||||
|
# Max allowed age of log message
|
||||||
|
max_delta = timedelta(TOML['options']['log_days'])
|
||||||
|
|
||||||
|
# Open log file
|
||||||
|
log_file_name = TOML['config']['twitter_account'] + '.log'
|
||||||
|
new_log_file_name = TOML['config']['twitter_account'] + '.log.new'
|
||||||
|
try:
|
||||||
|
log_file = open(log_file_name, 'r')
|
||||||
|
except FileNotFoundError:
|
||||||
|
# Nothing to do if there is no log file
|
||||||
|
exit(exit_code)
|
||||||
|
|
||||||
|
# Check each line
|
||||||
|
pos = log_file.tell()
|
||||||
|
while log_file:
|
||||||
|
line = log_file.readline()
|
||||||
|
try:
|
||||||
|
# Extract date on log line
|
||||||
|
date = datetime.strptime(line[:10], '%Y-%m-%d')
|
||||||
|
except ValueError:
|
||||||
|
# date was not found on this line, try next one
|
||||||
|
continue
|
||||||
|
# Time difference between log message and now
|
||||||
|
log_delta = datetime.now() - date
|
||||||
|
# Only keep the number of days of the difference
|
||||||
|
log_delta = timedelta(days=log_delta.days)
|
||||||
|
if log_delta < max_delta:
|
||||||
|
# Reset file pointer to position before reading last line
|
||||||
|
log_file.seek(pos)
|
||||||
|
remainder = log_file.read()
|
||||||
|
output_file = open(new_log_file_name, 'w')
|
||||||
|
output_file.write(remainder)
|
||||||
|
output_file.close()
|
||||||
|
# replace log file by new one
|
||||||
|
shutil.move(new_log_file_name, log_file_name)
|
||||||
|
|
||||||
|
break # Exit while loop
|
||||||
|
|
||||||
|
# Update read pointer position
|
||||||
|
pos = log_file.tell()
|
||||||
|
|
||||||
exit(exit_code)
|
exit(exit_code)
|
||||||
|
|
||||||
|
|
||||||
|
@ -974,46 +1021,6 @@ def main(argv):
|
||||||
|
|
||||||
logging.info('Deleted ' + str(excess_count) + ' old records from database.')
|
logging.info('Deleted ' + str(excess_count) + ' old records from database.')
|
||||||
|
|
||||||
# Close logger and log file
|
|
||||||
logging.shutdown()
|
|
||||||
|
|
||||||
# Remove older log messages
|
|
||||||
# Max allowed age of log message
|
|
||||||
max_delta = timedelta(TOML['options']['log_days'])
|
|
||||||
|
|
||||||
# Open log file
|
|
||||||
log_file_name = TOML['options']['twitter_account'] + '.log'
|
|
||||||
new_log_file_name = TOML['options']['twitter_account'] + '.log.new'
|
|
||||||
log_file = open(log_file_name, 'r')
|
|
||||||
|
|
||||||
# Check each line
|
|
||||||
pos = log_file.tell()
|
|
||||||
while log_file:
|
|
||||||
line = log_file.readline()
|
|
||||||
try:
|
|
||||||
# Extract date on log line
|
|
||||||
date = datetime.strptime(line[:10], '%Y-%m-%d')
|
|
||||||
except ValueError:
|
|
||||||
# date was not found on this line, try next one
|
|
||||||
continue
|
|
||||||
# Time difference between log message and now
|
|
||||||
log_delta = datetime.now() - date
|
|
||||||
# Only keep the number of days of the difference
|
|
||||||
log_delta = timedelta(days=log_delta.days)
|
|
||||||
if log_delta < max_delta:
|
|
||||||
# Reset file pointer to position before reading last line
|
|
||||||
log_file.seek(pos)
|
|
||||||
remainder = log_file.read()
|
|
||||||
output_file = open(new_log_file_name, 'w')
|
|
||||||
output_file.write(remainder)
|
|
||||||
output_file.close()
|
|
||||||
# replace log file by new one
|
|
||||||
shutil.move(new_log_file_name, log_file_name)
|
|
||||||
|
|
||||||
break # Exit while loop
|
|
||||||
|
|
||||||
pos = log_file.tell()
|
|
||||||
|
|
||||||
terminate(0)
|
terminate(0)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue
Block a user