forked from forks/microblog.pub
Add missing file
This commit is contained in:
parent
d378e17173
commit
fabe469a53
1 changed files with 37 additions and 0 deletions
37
app/utils/privacy_replace.py
Normal file
37
app/utils/privacy_replace.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
from urllib.parse import urlparse
|
||||
|
||||
from bs4 import BeautifulSoup # type: ignore
|
||||
from loguru import logger
|
||||
|
||||
from app.config import PRIVACY_REPLACE
|
||||
|
||||
|
||||
def replace_content(content: str) -> str:
|
||||
if not PRIVACY_REPLACE:
|
||||
return content
|
||||
|
||||
soup = BeautifulSoup(content, "html5lib")
|
||||
links = list(soup.find_all("a", href=True))
|
||||
if not links:
|
||||
return content
|
||||
|
||||
for link in links:
|
||||
link.attrs["href"] = replace_url(link.attrs["href"])
|
||||
|
||||
return soup.find("body").decode_contents()
|
||||
|
||||
|
||||
def replace_url(u: str) -> str:
|
||||
if not PRIVACY_REPLACE:
|
||||
return u
|
||||
|
||||
try:
|
||||
parsed_href = urlparse(u)
|
||||
except Exception:
|
||||
logger.warning(f"Failed to parse url={u}")
|
||||
return u
|
||||
|
||||
if new_netloc := PRIVACY_REPLACE.get(parsed_href.netloc.removeprefix("www.")):
|
||||
return parsed_href._replace(netloc=new_netloc).geturl()
|
||||
|
||||
return u
|
Loading…
Reference in a new issue