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