sane-bt-search: add --json flag to control output format

This commit is contained in:
Colin 2023-04-29 08:59:06 +00:00
parent fa5bc18721
commit 25d2234c69

View File

@ -10,6 +10,7 @@ returns select results and magnet links
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime
import json
import natsort import natsort
import requests import requests
import sys import sys
@ -48,6 +49,16 @@ class Torrent:
pub_date = datetime.fromisoformat(pub_date).astimezone() pub_date = datetime.fromisoformat(pub_date).astimezone()
return Torrent(seeders, pub_date, size, tracker, title, magnet) return Torrent(seeders, pub_date, size, tracker, title, magnet)
def to_dict(self) -> dict:
return dict(
seeders=self.seeders,
pub_date=self.pub_date.strftime("%Y-%m-%d"),
size=self.size,
tracker=self.tracker,
title=self.title,
magnet=self.magnet,
)
class Client: class Client:
def __init__(self): def __init__(self):
self.apikey = open("/run/secrets/jackett_apikey").read() self.apikey = open("/run/secrets/jackett_apikey").read()
@ -57,10 +68,7 @@ class Client:
url = f"{SERVICE}/{endpoint}" url = f"{SERVICE}/{endpoint}"
params = params.copy() params = params.copy()
params.update(apikey=self.apikey, _=str(int(time.time()))) params.update(apikey=self.apikey, _=str(int(time.time())))
print(url)
print(params)
resp = requests.get(url, params=params) resp = requests.get(url, params=params)
print(resp)
return resp.json() return resp.json()
def query(self, q: str) -> list: def query(self, q: str) -> list:
@ -77,6 +85,7 @@ def parse_args(args: list) -> dict:
options = dict( options = dict(
full=False, full=False,
query="", query="",
json=False,
) )
while args: while args:
arg = args[0] arg = args[0]
@ -99,9 +108,13 @@ def main(args: list):
num_listings = 100 if options["full"] else 5 num_listings = 100 if options["full"] else 5
client = Client() client = Client()
res = client.query(query) res = client.query(query)
print(f"found {len(res)} result(s)") if options["json"]:
for r in res[:num_listings]: dumpable = [t.to_dict() for t in res[:num_listings]]
print(r) print(json.dumps(dumpable))
else:
print(f"found {len(res)} result(s)")
for r in res[:num_listings]:
print(r)
if __name__ == "__main__": if __name__ == "__main__":
main(sys.argv[1:]) main(sys.argv[1:])