···68686969# Different CSVs use different names for the user count field
7070def get_usercount(row):
7171- for key in ("user_count", "mau", "accountcount","origins", "count", "nb_hostnames"):
7171+ for key in ("user_count", "mau", "active_users", "accountcount","origins", "count", "nb_hostnames"):
7272 val = row.get(key, "")
7373 if val != "":
7474 return int(val)
···76767777# Different CSVs use different columns for the hostname
7878def get_domain(row):
7979- for key in ("domain", "hostname","instance","org_id","e.id","o.name","a.asn","asn"):
7979+ for key in ("domain", "hostname","instance","name","org_id","e.id","o.name","a.asn","asn"):
8080 if key in row:
8181 return row.get(key, "")
8282 return None
+34
data-fetchers/fetch-instances.py
···11+#!/usr/bin/env python3
22+33+import requests
44+import csv
55+import sys
66+import os
77+import json
88+from pathlib import Path
99+1010+URL = "https://instances.social/api/1.0/instances/list?count=0"
1111+1212+OUTPUT_FILE = (Path(__file__).parent / "../data-static/instances-fromapi.csv").resolve()
1313+1414+1515+if __name__ == "__main__":
1616+ if not 'INSTANCES_API_TOKEN' in os.environ:
1717+ sys.exit("INSTANCES_API_TOKEN environment variable required, see https://instances.social/api/token")
1818+1919+ outfile = outfile = sys.argv[1] if len(sys.argv) == 2 else OUTPUT_FILE
2020+2121+ headers = { "Authorization": f"Bearer {os.environ['INSTANCES_API_TOKEN']}" }
2222+ r = requests.get(URL, headers=headers)
2323+ r.raise_for_status()
2424+2525+ rows = []
2626+ columns = ["id","name","users","active_users"]
2727+ for instance in r.json()["instances"]:
2828+ rows.append([instance["id"],instance["name"],instance["users"],instance["active_users"]])
2929+3030+ # Write CSV to stdout
3131+ with open(outfile, "w", newline="", encoding="utf-8") as f:
3232+ writer = csv.writer(f, lineterminator="\n")
3333+ writer.writerow(columns)
3434+ writer.writerows(rows)