Add script to fetch instances from peerlist
This commit is contained in:
parent
9e3cc089a8
commit
a7d98c64f2
65
fetch_instances.py
Normal file
65
fetch_instances.py
Normal file
@ -0,0 +1,65 @@
|
||||
from requests import get
|
||||
from hashlib import sha256
|
||||
import sqlite3
|
||||
import sys
|
||||
import json
|
||||
|
||||
domain = sys.argv[1]
|
||||
|
||||
headers = {
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0"
|
||||
}
|
||||
|
||||
|
||||
def get_hash(domain: str) -> str:
|
||||
return sha256(domain.encode("utf-8")).hexdigest()
|
||||
|
||||
|
||||
def get_peers(domain: str) -> str:
|
||||
try:
|
||||
res = get(f"https://{domain}/api/v1/instance/peers", headers=headers, timeout=5)
|
||||
return res.json()
|
||||
except:
|
||||
return None
|
||||
|
||||
peerlist = get_peers(domain)
|
||||
|
||||
def get_type(domain: str) -> str:
|
||||
try:
|
||||
res = get(f"https://{domain}/nodeinfo/2.1.json", headers=headers, timeout=5)
|
||||
if res.status_code == 404:
|
||||
res = get(f"https://{domain}/nodeinfo/2.0.json", headers=headers, timeout=5)
|
||||
if res.ok and "text/html" in res.headers["content-type"]:
|
||||
res = get(f"https://{domain}/nodeinfo/2.1", headers=headers, timeout=5)
|
||||
if res.ok:
|
||||
if res.json()["software"]["name"] == "akkoma":
|
||||
return "pleroma"
|
||||
else:
|
||||
return res.json()["software"]["name"]
|
||||
elif res.status_code == 404:
|
||||
res = get(f"https://{domain}/api/v1/instance", headers=headers, timeout=5)
|
||||
if res.ok:
|
||||
return "mastodon"
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
conn = sqlite3.connect("blocks.db")
|
||||
c = conn.cursor()
|
||||
|
||||
c.execute(
|
||||
"select domain from instances where 1"
|
||||
)
|
||||
|
||||
for instance in peerlist:
|
||||
print(instance)
|
||||
try:
|
||||
if c.fetchone() == None:
|
||||
c.execute(
|
||||
"insert into instances select ?, ?, ?",
|
||||
(instance, get_hash(instance), get_type(instance)),
|
||||
)
|
||||
conn.commit()
|
||||
except Exception as e:
|
||||
print("error:", e, blocker)
|
||||
conn.close()
|
Loading…
x
Reference in New Issue
Block a user