87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
""" mark entries in miniflux as read that are older than n days via api calls
|
|
"""
|
|
import argparse
|
|
import configparser
|
|
import sys
|
|
import time
|
|
import requests
|
|
|
|
def parse_commandline_args():
|
|
""" assmble commandline arguments - for more infomration see correspnding help entries
|
|
"""
|
|
parser = argparse.ArgumentParser(
|
|
description='mark entries older than n days as read in miniflux using the api of miniflux'
|
|
)
|
|
parser.add_argument(
|
|
'--config', type=str, help='path to the config file', required=True
|
|
)
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def is_reachable_and_healthy():
|
|
""" check if the api is reachable and healthy
|
|
"""
|
|
try:
|
|
request_healthcheck = requests.get(config['options']['url']+"/healthcheck")
|
|
except requests.exceptions.ConnectionError as error:
|
|
print(error)
|
|
sys.exit(1)
|
|
else:
|
|
if request_healthcheck.status_code != 200:
|
|
request_failed(request_healthcheck)
|
|
|
|
def get_ids_older_ndays():
|
|
""" find entries older then delta and add their id to id_array
|
|
"""
|
|
headers = {'X-Auth-Token': config['options']['token']}
|
|
delta = int(time.time()) - int(config['options']['age'])
|
|
params = {"status": "unread", "before" : delta}
|
|
request_unread = requests.get(config['options']['url']+'/v1/entries', params=params, headers=headers)
|
|
|
|
if request_unread.status_code != 200:
|
|
request_failed(request_unread)
|
|
|
|
entries = request_unread.json()
|
|
|
|
if not entries["entries"]:
|
|
return
|
|
|
|
for item in entries["entries"]:
|
|
if item['feed']['category']['title'] in config['options']['ignore']:
|
|
continue
|
|
|
|
id_array.append(item["id"])
|
|
|
|
def mark_as_read():
|
|
""" mark ids from id_array as read
|
|
"""
|
|
headers = {'X-Auth-Token': config['options']['token']}
|
|
payload = {"status": "read", "entry_ids" : id_array}
|
|
request_put_ids = requests.put(config['options']['url']+'/v1/entries', json=payload, headers=headers)
|
|
|
|
if request_put_ids.status_code != 204:
|
|
request_failed(request_put_ids)
|
|
|
|
def request_failed(request_input):
|
|
""" called when requests did not delive 200 or 204
|
|
"""
|
|
print(request_input.status_code, request_input.text)
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
id_array = []
|
|
args = parse_commandline_args()
|
|
config = configparser.ConfigParser()
|
|
config.read(args.config)
|
|
is_reachable_and_healthy()
|
|
get_ids_older_ndays()
|
|
|
|
if id_array:
|
|
mark_as_read()
|
|
|
|
print("entries marked as read:", len(id_array))
|