From 5a0006cac8550eca5893966d52ababe340c9ddd1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 22 Jul 2023 14:41:19 +0200 Subject: [PATCH] Continued: - added command fetch_joinmisskey to fetch instances from misskey.pages service --- fba/boot.py | 7 +++++++ fba/commands.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/fba/boot.py b/fba/boot.py index 1830a6d..6d0182a 100644 --- a/fba/boot.py +++ b/fba/boot.py @@ -144,6 +144,13 @@ def init_parser(): ) parser.set_defaults(command=commands.fetch_joinfediverse) + ### Fetch blocks from misskey.page ### + parser = subparser_command.add_parser( + "fetch_joinmisskey", + help="Fetches instances.json from misskey.page", + ) + parser.set_defaults(command=commands.fetch_joinmisskey) + ### Fetch blocks from fediverse.observer ### parser = subparser_command.add_parser( "fetch_observer", diff --git a/fba/commands.py b/fba/commands.py index 50700c8..122263b 100644 --- a/fba/commands.py +++ b/fba/commands.py @@ -1240,6 +1240,53 @@ def fetch_fedipact(args: argparse.Namespace) -> int: logger.debug("Success! - EXIT!") return 0 +def fetch_joinmisskey(args: argparse.Namespace) -> int: + logger.debug("args[]='%s' - CALLED!", type(args)) + + logger.debug("Invoking locking.acquire() ...") + locking.acquire() + + source_domain = "instanceapp.misskey.page" + if sources.is_recent(source_domain): + logger.info("API from source_domain='%s' has recently being accessed - EXIT!", source_domain) + return 0 + else: + logger.debug("source_domain='%s' has not been recently used, marking ...", source_domain) + sources.update(source_domain) + + raw = utils.fetch_url( + f"https://{source_domain}/instances.json", + network.web_headers, + (config.get("connection_timeout"), config.get("read_timeout")) + ).text + logger.debug("raw()=%d,raw[]='%s'", len(raw), type(raw)) + + parsed = json.loads(raw) + logger.debug("parsed[%s]()=%d", type(parsed), len(parsed)) + + if "instancesInfos" not in parsed: + logger.warning("parsed()=%d does not contain element 'instancesInfos'") + return 1 + + logger.info("Checking %d instane(s) ...", len(parsed["instancesInfos"])) + for row in parsed["instancesInfos"]: + logger.debug("row[%s]='%s'", type(row), row) + if "url" not in row: + logger.warning("row()=%d does not have element 'url' - SKIPPED!", len(row)) + continue + elif not utils.is_domain_wanted(row["url"]): + logger.debug("row[url]='%s' is not wanted - SKIPPED!", row["url"]) + continue + elif instances.is_registered(row["url"]): + logger.debug("row[url]='%s' is already registered - SKIPPED!", row["url"]) + continue + + logger.info("Fetching row[url]='%s' ...", row["url"]) + federation.fetch_instances(row["url"], "misskey.io", None, inspect.currentframe().f_code.co_name) + + logger.debug("Success! - EXIT!") + return 0 + def fetch_joinfediverse(args: argparse.Namespace) -> int: logger.debug("args[]='%s' - CALLED!", type(args)) -- 2.39.5