add support for TinyURL

This commit is contained in:
agatha 2024-04-13 23:03:50 -04:00
parent e5b701aa55
commit f10e8c5536
4 changed files with 38 additions and 17 deletions

View File

@ -1,5 +1,6 @@
const shortenerDomains = [
"t.co"
"t.co",
"tinyurl.com"
];
browser.contextMenus.create({

View File

@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Unshortener",
"version": "0.2",
"version": "0.3",
"description": "Unshorten links from Twitter.",

View File

@ -3,10 +3,11 @@ from typing import Optional
from urllib.parse import urlparse
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from unshorteners import unshorten_twitter
from unshorteners import unshorten_twitter, unshorten_tinyurl
UNSHORTEN = {
't.co': unshorten_twitter
't.co': unshorten_twitter,
'tinyurl.com': unshorten_tinyurl
}
CACHE = {}
@ -32,9 +33,11 @@ async def receive_url(url: Optional[str] = None):
return {"error": f"cannot unshorten {domain}"}
if url in CACHE:
unshortened = CACHE[url]
else:
unshortened = UNSHORTEN[domain](url)
CACHE[url] = unshortened
return CACHE[url]
return unshortened
result = UNSHORTEN[domain](url)
if result:
CACHE[url] = result
return result
return {"error": f"server error"}

View File

@ -1,19 +1,36 @@
"""Unshortening functions"""
import re
import requests
from typing import Optional
def unshorten_twitter(url: str):
def unshorten_tinyurl(url: str) -> Optional[str]:
"""Retrieve the actual URL behind a TinyURL."""
try:
response = requests.get(url, timeout=4, allow_redirects=False)
except requests.RequestException:
return None
if response.status_code == 301:
return response.headers.get("location", None)
return None
def unshorten_twitter(url: str) -> Optional[str]:
"""Retrieve the actual URL behind a Twitter URL."""
pattern = re.compile(r"<title>(.*?)<\/title>")
response = requests.get(
url=url,
headers={
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0"
},
timeout=4
)
try:
response = requests.get(
url=url,
headers={
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0"
},
timeout=4
)
except requests.RequestException:
return None
match = pattern.search(response.text)
if match: