Oops add missing code
This commit is contained in:
32
utils/lookup.py
Normal file
32
utils/lookup.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import little_boxes.activitypub as ap
|
||||
import json
|
||||
import requests
|
||||
|
||||
import mf2py
|
||||
|
||||
|
||||
def lookup(url: str) -> ap.BaseActivity:
|
||||
"""Try to find an AP object related to the given URL."""
|
||||
backend = ap.get_backend()
|
||||
resp = requests.get(
|
||||
url,
|
||||
timeout=15,
|
||||
allow_redirects=False,
|
||||
headers={"User-Agent": backend.user_agent()},
|
||||
)
|
||||
resp.raise_for_status()
|
||||
|
||||
# If the page is HTML, maybe it contains an alternate link pointing to an AP object
|
||||
for alternate in mf2py.parse(resp.text).get("alternates", []):
|
||||
if alternate.get("type") == "application/activity+json":
|
||||
return ap.fetch_remote_activity(alternate["url"])
|
||||
|
||||
try:
|
||||
# Maybe the page was JSON-LD?
|
||||
data = resp.json()
|
||||
return ap.parse_activity(data)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
|
||||
# Try content negotiation (retry with the AP Accept header)
|
||||
return ap.fetch_remote_activity(url)
|
Reference in New Issue
Block a user