mirror of
https://git.kiwifarms.net/mint/fedi-block-api.git
synced 2024-10-23 01:19:04 +00:00
Add script to fetch instances from peerlist
This commit is contained in:
parent
9e3cc089a8
commit
a7d98c64f2
1 changed files with 65 additions and 0 deletions
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…
Reference in a new issue