FixTweet/bot/TwitterFixer.py
2023-07-03 08:44:24 +02:00

86 lines
2.1 KiB
Python

from urllib.parse import urlparse
class TwLink:
"""
Disclaimer.
I have no relation with fxtwitter, nor vxtwitter, or anything else being used there.
"""
_user: str
_post_id: str
_url: str
_prefix: [str] # List of valid fxshit
_valid_url = False
def __init__(self, url: str):
self._url = url
self.__review_url()
self._prefix = [
"https://fxtwitter.com",
"https://vxtwitter.com"
]
pass
def __review_url(self) -> None:
"""
Checks if twitter URL is a valid post.
It requires:
- Twitter domain.
- /status/
- Username
- Post ID
:return: STR, returns "fixed" URL if given URL is valid.
Returns nothing if isn't valid.
"""
valid_twitter_hosts = ["twitter.com"]
parsed_url = urlparse(url=self._url)
host = parsed_url.netloc
path: str | [str] = parsed_url.path
if path.startswith("/"):
# Remove initial /
path = path[1:]
path = path.split("/")
if host not in valid_twitter_hosts \
or len(path) > 3 \
or path[1].lower() != "status":
print(f"URL '{self._url}' is NOT valid!")
else:
print(f"URL '{self._url}' is valid")
self._valid_url = True
self._user = path[0]
self._post_id = path[2]
@property
def __return_url(self) -> str:
"""
Returns the URL if the class been flagged as valid URL.
Retrusn an empty string if it's not flagged as valid URL.
:return:
"""
if self._valid_url:
return f"{self._prefix[0]}/{self._user}/status/{self._post_id}"
else:
return ""
def __str__(self) -> str:
return self.__return_url
def __bool__(self) -> bool:
if self.__return_url is not None:
return True
def __call__(self, *args, **kwargs) -> str:
return self.__str__()
def __int__(self):
return len(self.__str__())