mirror of
https://gitlab.com/jeancf/twoot.git
synced 2025-02-22 08:12:15 +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
|
||||
redirection from links included in tweets. Obfuscated links are replaced
|
||||
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:
|
||||
|
||||
* **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
|
||||
* 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),
|
||||
|
@ -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
|
||||
* 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=`.
|
||||
* 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.
|
||||
|
||||
|
@ -33,9 +34,12 @@ It is simple to set-up on a local machine, configurable and feature-rich.
|
|||
|
||||
## Usage
|
||||
|
||||
twoot.py [-h] [-f <.toml config file>] [-t <twitter account>] [-i <mastodon instance>]
|
||||
[-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>]
|
||||
```sh
|
||||
twoot.py [-h] [-f <.toml config file>] [-t <twitter account>] [-i <mastodon instance>]
|
||||
[-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
|
||||
|
||||
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)
|
||||
|
||||
```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`
|
||||
|
|
87
twoot.py
87
twoot.py
|
@ -539,10 +539,57 @@ def login(password):
|
|||
def terminate(exit_code):
|
||||
"""
|
||||
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
|
||||
"""
|
||||
logging.info('Run time : {t:2.1f} seconds.'.format(t=time.time() - START_TIME))
|
||||
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)
|
||||
|
||||
|
||||
|
@ -974,46 +1021,6 @@ def main(argv):
|
|||
|
||||
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)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in New Issue
Block a user